diff --git a/.github/actions/setup-android-toolchain/action.yml b/.github/actions/setup-android-toolchain/action.yml index 1dbd2b34673e..ab68124d8326 100644 --- a/.github/actions/setup-android-toolchain/action.yml +++ b/.github/actions/setup-android-toolchain/action.yml @@ -26,7 +26,7 @@ runs: esac - name: Setup Java - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5 + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 with: distribution: temurin # Keep sdkmanager on the stable JDK path for Linux CI runners. @@ -43,25 +43,27 @@ runs: - name: Restore Android SDK cache id: android-sdk-cache if: inputs.cache-mode != 'off' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/.android-sdk - key: ${{ runner.os }}-android-sdk-v1-cmdline-14742923-platform-37.0-build-tools-36.0.0 + key: ${{ runner.os }}-android-sdk-v1-cmdline-15859902-platform-37.0-build-tools-36.0.0 restore-keys: | - ${{ runner.os }}-android-sdk-v1- + ${{ runner.os }}-android-sdk-v1-cmdline-15859902- - name: Setup Android SDK command-line tools shell: bash run: | set -euo pipefail ANDROID_SDK_ROOT="$HOME/.android-sdk" - CMDLINE_TOOLS_VERSION="14742923" + CMDLINE_TOOLS_VERSION="15859902" + CMDLINE_TOOLS_SHA256="4e4c464f145a7512b57d088ac6c278c03c9eea610886b35a5e0804e74eedf583" ARCHIVE="commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip" URL="https://dl.google.com/android/repository/${ARCHIVE}" if [[ ! -x "${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager" ]]; then mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" curl -fsSL --connect-timeout 10 --max-time 300 "${URL}" -o "${RUNNER_TEMP}/${ARCHIVE}" + printf '%s %s\n' "${CMDLINE_TOOLS_SHA256}" "${RUNNER_TEMP}/${ARCHIVE}" | sha256sum --check - rm -rf "${ANDROID_SDK_ROOT}/cmdline-tools/latest" unzip -q "${RUNNER_TEMP}/${ARCHIVE}" -d "${ANDROID_SDK_ROOT}/cmdline-tools" mv "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" "${ANDROID_SDK_ROOT}/cmdline-tools/latest" @@ -86,7 +88,7 @@ runs: - name: Save Android SDK cache if: inputs.cache-mode == 'read-write' && steps.android-sdk-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/.android-sdk key: ${{ steps.android-sdk-cache.outputs.cache-primary-key }} diff --git a/.github/actions/setup-node-env/action.yml b/.github/actions/setup-node-env/action.yml index 16ef00595ed5..221c0b367e85 100644 --- a/.github/actions/setup-node-env/action.yml +++ b/.github/actions/setup-node-env/action.yml @@ -139,7 +139,7 @@ runs: if: inputs.cache-mode != 'off' && runner.os != 'Windows' && runner.environment != 'github-hosted' id: node-toolchain-restore continue-on-error: true - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ runner.temp }}/openclaw-node-toolchain/node key: openclaw-node-toolchain-v1-${{ runner.os }}-${{ runner.arch }}-${{ inputs.node-version }}- @@ -203,7 +203,7 @@ runs: id: dependency-cache if: inputs.cache-mode != 'off' && inputs.dependency-cache == 'true' continue-on-error: true - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | node_modules @@ -246,7 +246,7 @@ runs: - name: Restore Vitest transform cache id: vitest-cache if: inputs.cache-mode != 'off' && (inputs.vitest-fs-cache == 'true' || inputs.restore-test-caches == 'true') && runner.os != 'Windows' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: /var/tmp/openclaw-vitest-fs-cache key: ${{ github.repository }}-vitest-fs-v3-protected-${{ runner.os }}-${{ runner.arch }}-node-${{ inputs.node-version }}-${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', '**/package.json', '**/tsconfig*.json', 'vitest.config.*', 'test/vitest/**', 'src/state/*.sql', '!**/node_modules/**') }}-${{ github.run_id }}-${{ github.run_attempt }} @@ -298,7 +298,7 @@ runs: - name: Restore Node compile cache id: node-compile-cache if: inputs.cache-mode != 'off' && (inputs.node-compile-cache == 'true' || inputs.restore-test-caches == 'true') && runner.os != 'Windows' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: /var/tmp/openclaw-node-compile-cache key: ${{ github.repository }}-node-compile-v3-${{ inputs.node-compile-cache-scope }}-protected-${{ runner.os }}-${{ runner.arch }}-node-${{ inputs.node-version }}-${{ steps.node-compile-cache-epoch.outputs.value }} @@ -457,7 +457,7 @@ runs: - name: Restore build-all cache id: build-all-cache if: inputs.cache-mode != 'off' && inputs.build-all-cache-scope != '' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .artifacts/build-all-cache # Exact keys deduplicate concurrent jobs. Coarse restore supplies the diff --git a/.github/actions/setup-pnpm-store-cache/action.yml b/.github/actions/setup-pnpm-store-cache/action.yml index 1afce7632b41..d146c5058b36 100644 --- a/.github/actions/setup-pnpm-store-cache/action.yml +++ b/.github/actions/setup-pnpm-store-cache/action.yml @@ -107,7 +107,7 @@ runs: - name: Restore pnpm store cache id: pnpm-store-cache if: ${{ inputs.cache-mode != 'off' && runner.os != 'Windows' }} - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ steps.pnpm-store.outputs.path }} key: pnpm-store-${{ runner.os }}-${{ runner.arch }}-${{ inputs.node-version }}-${{ hashFiles(inputs.package-manager-file) }}-${{ hashFiles(inputs.lockfile-path) }} diff --git a/.github/release/clawhub-cli/package-lock.json b/.github/release/clawhub-cli/package-lock.json index 7b326609bb99..bfec651b4b4d 100644 --- a/.github/release/clawhub-cli/package-lock.json +++ b/.github/release/clawhub-cli/package-lock.json @@ -8,28 +8,28 @@ "name": "openclaw-release-clawhub-cli", "version": "1.0.0", "dependencies": { - "clawhub": "0.23.1" + "clawhub": "0.23.3" } }, "node_modules/@ark/schema": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.0.tgz", - "integrity": "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==", + "version": "0.56.2", + "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.2.tgz", + "integrity": "sha512-Qx4D2JFbBWpntiHZaTv7bGG4H/M2rigiknezKg/WVyDSaLdE4YCcWAOoFB7pjjDqHbbV2OqRfntm1nnXvwMexg==", "license": "MIT", "dependencies": { - "@ark/util": "0.56.0" + "@ark/util": "0.56.2" } }, "node_modules/@ark/util": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.0.tgz", - "integrity": "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==", + "version": "0.56.2", + "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.2.tgz", + "integrity": "sha512-9kU2sUE38FZEGG7l3hamYMBieLYEJh2L1mrYD2eXpT+78EnQSV1bhjxJhnxGBMSTbtwpBSDNSK+K60WvaI/DTQ==", "license": "MIT" }, "node_modules/@clack/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.2.tgz", - "integrity": "sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", + "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", "license": "MIT", "dependencies": { "fast-wrap-ansi": "^0.2.0", @@ -40,12 +40,12 @@ } }, "node_modules/@clack/prompts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.6.0.tgz", - "integrity": "sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz", + "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==", "license": "MIT", "dependencies": { - "@clack/core": "1.4.2", + "@clack/core": "1.4.3", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" @@ -54,11 +54,27 @@ "node": ">= 20.12.0" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@openclaw/plugin-inspector": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@openclaw/plugin-inspector/-/plugin-inspector-0.3.17.tgz", - "integrity": "sha512-JPPHPhiXMsIvrV8UR8RQjhflMjRZX/uIhy9meE81dup7MMSnRJcsTGOXYACohv6e4z2P95z2QuE7nZkWT6Ysuw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@openclaw/plugin-inspector/-/plugin-inspector-0.3.20.tgz", + "integrity": "sha512-Tyudswj2I/0BCCK9cQ2x8znzjOEuZZhT00hTnGaPiinYHvbPwiZIW7s8EMJKnGW53g7e1UGccCq+Fq2OCfKMsA==", "license": "MIT", + "dependencies": { + "semver": "^7.8.5", + "tar": "^7.5.22" + }, "bin": { "plugin-inspector": "src/cli.js" }, @@ -79,23 +95,23 @@ } }, "node_modules/arkregex": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.6.tgz", - "integrity": "sha512-9mvuMKQuibfWhBrsNYhsKhNb6k9oEHoAJ/FvDiqe8h+E9Siwe0/cro1WVOGgpajXQ9ZHd24yCOf2k35Q/QqUQw==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.8.tgz", + "integrity": "sha512-PJcx6G1kQTgLKPUbeYlYecDRaKq15AMSGVajlKFYWlPeJRQL+j3dKE6tyMs40HZ99djS1l9Vhl3ezAHy9JBIqQ==", "license": "MIT", "dependencies": { - "@ark/util": "0.56.0" + "@ark/util": "0.56.2" } }, "node_modules/arktype": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.1.tgz", - "integrity": "sha512-CWPJxNoSxrS+NYGB3ufwc/blFonESEW5vBQyYPVS0rf4STu8VWoAWfKJSl5vVVm56h4yxpwbODeYwy6XFKvojA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.3.tgz", + "integrity": "sha512-7W+0RLTUNJiBFIIZXwOQxSR8Z273IAd6IvqBeG9+gHnQKFsIx2C0iOtGTmMrPnlX4qLXyc5+ll7A0BIj9WrbTg==", "license": "MIT", "dependencies": { - "@ark/schema": "0.56.0", - "@ark/util": "0.56.0", - "arkregex": "0.0.6" + "@ark/schema": "0.56.2", + "@ark/util": "0.56.2", + "arkregex": "0.0.8" } }, "node_modules/chalk": { @@ -110,24 +126,36 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/clawhub": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/clawhub/-/clawhub-0.23.1.tgz", - "integrity": "sha512-YvUImhsVaM90BUAv3uP7lfABziwR5XL3ch2Owa+GvNxwQ2xzZFmZC0yVjAtQbvep+dDDS16nUGRwKx7jqnTOEA==", + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/clawhub/-/clawhub-0.23.3.tgz", + "integrity": "sha512-VwM6FQrZVarFRDiEqG42npUeyCu/iLhPnpO+b7kKIGRXv+TA6Lb8pboHnIgT6cmjFEnW3j/pTbshWeDQMQ7QWQ==", "license": "MIT", "dependencies": { - "@clack/prompts": "1.6.0", - "@openclaw/plugin-inspector": "0.3.17", - "arktype": "2.2.1", + "@clack/prompts": "1.7.0", + "@openclaw/plugin-inspector": "0.3.20", + "arktype": "2.2.3", "commander": "15.0.0", + "croner": "10.0.1", "fflate": "0.8.3", - "ignore": "7.0.5", + "ignore": "7.0.6", "json5": "2.2.3", "mime": "4.1.0", "ora": "9.4.1", "p-retry": "8.0.0", "semver": "7.8.5", - "undici": "7.28.0" + "undici": "7.29.0", + "unicode-case-folding": "1.1.1", + "yaml": "2.9.0" }, "bin": { "clawdhub": "bin/clawdhub.js", @@ -173,6 +201,25 @@ "node": ">=22.12.0" } }, + "node_modules/croner": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/croner/-/croner-10.0.1.tgz", + "integrity": "sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==", + "funding": [ + { + "type": "other", + "url": "https://paypal.me/hexagonpp" + }, + { + "type": "github", + "url": "https://github.com/sponsors/hexagon" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, "node_modules/fast-string-truncated-width": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", @@ -216,9 +263,9 @@ } }, "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "license": "MIT", "engines": { "node": ">= 4" @@ -315,6 +362,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/onetime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", @@ -456,15 +524,61 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/undici": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", - "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", "license": "MIT", "engines": { "node": ">=20.18.1" } }, + "node_modules/unicode-case-folding": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unicode-case-folding/-/unicode-case-folding-1.1.1.tgz", + "integrity": "sha512-ZAYziAnMTBisO2dT5tyGvBFMNsIfonOS/BZTd3UZaKWtXMOZqK8s8HRUCrlKxGCTeCxCuCjS/6HW+4a6G+rbzw==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yoctocolors": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", diff --git a/.github/release/clawhub-cli/package.json b/.github/release/clawhub-cli/package.json index 8b11d4691a6f..94fdd121a912 100644 --- a/.github/release/clawhub-cli/package.json +++ b/.github/release/clawhub-cli/package.json @@ -3,6 +3,6 @@ "private": true, "version": "1.0.0", "dependencies": { - "clawhub": "0.23.1" + "clawhub": "0.23.3" } } diff --git a/.github/release/vercel-cli/package-lock.json b/.github/release/vercel-cli/package-lock.json index 941800942c74..d4ad584eb9ad 100644 --- a/.github/release/vercel-cli/package-lock.json +++ b/.github/release/vercel-cli/package-lock.json @@ -8,7 +8,7 @@ "name": "openclaw-release-vercel-cli", "version": "1.0.0", "dependencies": { - "vercel": "58.4.4" + "vercel": "59.1.3" } }, "node_modules/@bytecodealliance/preview2-shim": { @@ -813,9 +813,9 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", - "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", + "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", "license": "MIT", "optional": true, "dependencies": { @@ -829,8 +829,8 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "node_modules/@nodelib/fs.scandir": { @@ -1550,14 +1550,14 @@ } }, "node_modules/@vercel/backends": { - "version": "0.8.30", - "resolved": "https://registry.npmjs.org/@vercel/backends/-/backends-0.8.30.tgz", - "integrity": "sha512-rCDufBDL3Y9eiKOKZLoiy350KMt/kP7YmcRgI1egfrUpaaGObDesxkK9IQdP7fnYrK+rc2+rK07qb21AdsoAHw==", + "version": "0.8.38", + "resolved": "https://registry.npmjs.org/@vercel/backends/-/backends-0.8.38.tgz", + "integrity": "sha512-xzn5c5SgNMm8Oi0aeKPtCNYusQjD0Z2n7uZEQJ9nFCaJ5w301DshmatpOELmQipWp8IbO5UYiLGKmSsCPynZ1w==", "license": "Apache-2.0", "dependencies": { - "@vercel/build-utils": "13.36.3", + "@vercel/build-utils": "14.1.1", "@vercel/nft": "1.10.0", - "@vercel/static-config": "3.4.0", + "@vercel/static-config": "3.4.1", "execa": "3.2.0", "fs-extra": "11.1.0", "get-port": "5.1.1", @@ -1581,11 +1581,12 @@ } }, "node_modules/@vercel/blob": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-2.4.0.tgz", - "integrity": "sha512-ncQ8CRb6XoEAYJwjOTRGpACRT6h/AeY+/33gLyeVxG5BIes27OPm1jmqreF+JHjcTmGhClTP+kBpmyLfbV0xew==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-2.8.0.tgz", + "integrity": "sha512-Nu+HWKpkgovCh/ezlG7wCVwF7RErTzLzZMbGKFBdGBCbTKyK+s5VXPLl+0+TpNEQPH8AVaGzOpIsXUOtkqylCQ==", "license": "Apache-2.0", "dependencies": { + "@vercel/oidc": "^3.6.1", "async-retry": "^1.3.3", "is-buffer": "^2.0.5", "is-node-process": "^1.2.0", @@ -1596,6 +1597,30 @@ "node": ">=20.0.0" } }, + "node_modules/@vercel/blob/node_modules/@vercel/cli-config": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.4.tgz", + "integrity": "sha512-kZ5SojbrV06GHoU6QIWGwDXLov+s9rWZ7QqdqKfJfBGCNUieGfgaCjeeenNy8Y+QC0bwC0dZ2B4l5Hvdmrgpdw==", + "license": "Apache-2.0", + "dependencies": { + "xdg-app-paths": "5", + "zod": "4.1.11" + } + }, + "node_modules/@vercel/blob/node_modules/@vercel/oidc": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.8.5.tgz", + "integrity": "sha512-RwXYtnt6za+5UO4IaLywN/6B95AlLqynPRUWRJxeJ/qufwkcLUbZNUxYtzT0uMpuraWhlNcGqPNGkTnZr4BGBw==", + "license": "Apache-2.0", + "dependencies": { + "@vercel/cli-config": "0.2.4", + "@vercel/cli-exec": "1.0.1", + "jose": "^5.9.6" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/@vercel/blob/node_modules/undici": { "version": "6.28.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", @@ -1606,91 +1631,153 @@ } }, "node_modules/@vercel/build-utils": { - "version": "13.36.3", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-13.36.3.tgz", - "integrity": "sha512-2f6RhmPYLiQjAJltaq9WPsRNdnzos0bWShL/AbYLXoydBVszlX8H/5w9rJ23nqPmtGjbDfZ9kLLGuAdyftvcTA==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-14.1.1.tgz", + "integrity": "sha512-kW9CeW0aokEBvX1rSgNyOKg90VyIQOmT0wBl7KXneM3Qs1+x4Puakqp97BdIgttWEtmN96UvdhQVG2bCA5JsPA==", "license": "Apache-2.0", "dependencies": { - "@vercel/python-analysis": "0.12.0", + "@vercel/python-analysis": "0.13.2", "cjs-module-lexer": "1.2.3", "es-module-lexer": "1.5.0" } }, "node_modules/@vercel/cervel": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@vercel/cervel/-/cervel-0.1.38.tgz", - "integrity": "sha512-yxPU1m2sYAyjHI9uWW6XmQcvxobYPhI7YzCGH4Vb6/F/lHtaRqHfBn9IVxpVdIKTWRdp9GZeJgNEC2gRhgRlmw==", + "version": "0.1.46", + "resolved": "https://registry.npmjs.org/@vercel/cervel/-/cervel-0.1.46.tgz", + "integrity": "sha512-EBSvwvshMnCf+Xra5TwiPtecBoowYGZhPvBqtrza96wruCRQGGdOwnPkP+o+oc7a02uySpengg8p+q/YWh5iCw==", "license": "Apache-2.0", "dependencies": { - "@vercel/backends": "0.8.30" + "@vercel/backends": "0.8.38" }, "bin": { "cervel": "bin/cervel.mjs" } }, "node_modules/@vercel/cli-auth": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@vercel/cli-auth/-/cli-auth-0.3.1.tgz", - "integrity": "sha512-TaMXMiPrwcLoLxu6ExcJ8yEw8b8Qss6UZkNYF4xIq+/VdvAk0l8JCpeAwzuHgKuJqmIDrOvtfjHO2+T/MBR3dg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@vercel/cli-auth/-/cli-auth-0.3.4.tgz", + "integrity": "sha512-RQf67uc5HPtlhok3H2fChFW17ZB0gQxw0eeFkboMkHuclejfZ1cHy+04dRdnetX8/J8L6YUErNW2kO1tmeoKzw==", "dependencies": { "@napi-rs/keyring": "1.2.0", - "@vercel/cli-config": "0.2.1", + "@vercel/cli-config": "0.2.3", "async-listen": "3.0.0", "open": "8.4.0", "zod": "4.1.11" } }, "node_modules/@vercel/cli-config": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.1.tgz", - "integrity": "sha512-RhfyXmRLHdbnry8RJqHDc+5rGxMZ0bu+fpysZjtv3bE+BubpuwxTancHOKiH5zKQREsdwFVr3mOI2kOvxlOyxA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.3.tgz", + "integrity": "sha512-Ggh0Wmi92TUkUexmSUPkkDtvJmbjUr7IvF5T3FkSsWrXXs3GFzOujfxFpECdJZpux1JG4SWDv9BT4w++TDgD6A==", "license": "Apache-2.0", "dependencies": { "xdg-app-paths": "5", "zod": "4.1.11" } }, + "node_modules/@vercel/cli-exec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vercel/cli-exec/-/cli-exec-1.0.1.tgz", + "integrity": "sha512-g9XerViJ/paZujufXYcu5XYI2vU2rtB4sgdpjUHde5RnOkdmpu0ngH46LCFGHoPXO/C+qDPSczIHIRN+8Q2YKQ==", + "license": "Apache-2.0", + "dependencies": { + "execa": "5.1.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@vercel/cli-exec/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@vercel/cli-exec/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vercel/cli-exec/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@vercel/cli-exec/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "node_modules/@vercel/container": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@vercel/container/-/container-0.1.0.tgz", - "integrity": "sha512-m1Y3qT1JOUFKLXUI54hVHSkRTGrvI8LC7EPNsEE1MBME8gk8aoIB+lJWl59jd56MjTDcTc3NCzPdHIZ65grZkA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@vercel/container/-/container-0.2.0.tgz", + "integrity": "sha512-l4prOR48EFu3CGNgwN64DCNwfqw8ZJty70HrY0X0+i5AMxi4GiIttZsSYBmttUAM+OSIg3BqMg767dlzjlzQyQ==", "license": "Apache-2.0" }, "node_modules/@vercel/detect-agent": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@vercel/detect-agent/-/detect-agent-1.2.3.tgz", - "integrity": "sha512-VYNCgUc0nOmC4WJmWw9GkrKdfr8Zl4/rxhC5SvgacBgxiW9W/9NRttUoHHXV8xdII3MaRgkZZVX8Ikzc/Jmjag==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vercel/detect-agent/-/detect-agent-1.2.5.tgz", + "integrity": "sha512-0krENrjuitlW8s6TJu0MlqCevyCU7K7JK63jZAf7xZ6n17tx+vUEwzHT3sTxawtwZxaW21hu+oFUpoOrm49FsQ==", "license": "Apache-2.0", "engines": { "node": ">=14" } }, "node_modules/@vercel/elysia": { - "version": "0.1.107", - "resolved": "https://registry.npmjs.org/@vercel/elysia/-/elysia-0.1.107.tgz", - "integrity": "sha512-DMGyVHfDqLma8Su4DsQ0ZRtS06AMIbSsUKekf+IxKj/JgtGBjRxaYHunBxYaW6l0KDxvfGkghhDLYAaajM5Xfw==", + "version": "0.1.115", + "resolved": "https://registry.npmjs.org/@vercel/elysia/-/elysia-0.1.115.tgz", + "integrity": "sha512-ztwUZeYOGlYVDahkfGjDKuitsi8oAjcpxMHMq8hR/eLr49RMWfrfWF3piC6By0/eZwCq2pVqltl4PaYkAVvZbA==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0" + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1" } }, "node_modules/@vercel/error-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.2.0.tgz", - "integrity": "sha512-WFWiRxfPzoYWYifaj4thSKvAaZZwUOqD4k5GINRIgZgCiS2E3iAJbWbIsIZmkQdTecWFHcWGA6q48CjisgpOBA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.2.1.tgz", + "integrity": "sha512-9DhP8jP7raLML4hGsBemxX5fXuQnu5xxMV+HjGygGbzEmVK/+KyJ3QP2Cw7PdF0uXdb9N0Qa4c3tRGH34ZX6vw==", "license": "Apache-2.0" }, "node_modules/@vercel/express": { - "version": "0.1.121", - "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.1.121.tgz", - "integrity": "sha512-d7W6xuMrIkduKphq1BRvas1kZiQGT0fsHxvaRHKBIznx0R9BlUkYDhrvEeat4qleYXuVjKHYoHXyvbOO9z4ykA==", + "version": "0.1.129", + "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.1.129.tgz", + "integrity": "sha512-4+msqs4+9StJuu4KZAGCvxzJos3wn+XI/1yL4X4jUKzgh6O+mtLSAxCDdZ3p0sQGP9qEWrp21qlGRNpt+aJ8fQ==", "license": "Apache-2.0", "dependencies": { - "@vercel/cervel": "0.1.38", + "@vercel/cervel": "0.1.46", "@vercel/nft": "1.10.0", - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0", + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1", "fs-extra": "11.1.0", "path-to-regexp": "8.3.0", "ts-morph": "12.0.0", @@ -1707,13 +1794,13 @@ } }, "node_modules/@vercel/fastify": { - "version": "0.1.110", - "resolved": "https://registry.npmjs.org/@vercel/fastify/-/fastify-0.1.110.tgz", - "integrity": "sha512-8RukhVPXAJqZK5zJSS3uCdlVKdxNLjN0vzTfE+kyupieYgU3cmhJdXULKMI2beYLjG7VW6G1oz4AZTWU2ockzg==", + "version": "0.1.118", + "resolved": "https://registry.npmjs.org/@vercel/fastify/-/fastify-0.1.118.tgz", + "integrity": "sha512-5sqhQYRGItIKbyA9Plu6iTqQS9q9H6F/vq2QvVjSwKHumiD0r6vdujXqTxzjZ324rUF77u7l4su8eNTIVyvdhQ==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0" + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1" } }, "node_modules/@vercel/fun": { @@ -1773,52 +1860,52 @@ } }, "node_modules/@vercel/gatsby-plugin-vercel-analytics": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.11.tgz", - "integrity": "sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.12.tgz", + "integrity": "sha512-Ejlhwxr7EBYJxtwYnlh6Vm6A2dPsUSPxMdYrfv0koZkgAzVwo7cG4aDQiy7iASMaGzwuI/PAnwlY2sJBF5b4OA==", "license": "Apache-2.0", "dependencies": { "web-vitals": "0.2.4" } }, "node_modules/@vercel/gatsby-plugin-vercel-builder": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.2.33.tgz", - "integrity": "sha512-UAb+Vx5pX1Y/WrBepbZG+gZBtQfAYsJ5alyjPH5c83QoWc4D4ZLG9YKIkChRnMSSwPIpZOjt9J6PAsr+FxGVJw==", + "version": "2.2.41", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.2.41.tgz", + "integrity": "sha512-eZAPpKaExTuDpmPg0louk2JHYd791VMUapJQanfEOUGJ4cf8EcAJsAwTjx18RllpftfcrwAiPnk5WOsiJHWC/Q==", "license": "Apache-2.0", "dependencies": { "@sinclair/typebox": "0.25.24", - "@vercel/build-utils": "13.36.3", + "@vercel/build-utils": "14.1.1", "esbuild": "0.27.0", "etag": "1.8.1", "fs-extra": "11.1.0" } }, "node_modules/@vercel/go": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.10.2.tgz", - "integrity": "sha512-ZJqx1GzD1qqMkI92jEHp04zCwbZ7tNwcgI58e7t8HiYvILwCZ4Rvq0hfjTjsk+0Zn8A369qs4eAHvCYu38uB5A==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@vercel/go/-/go-3.11.0.tgz", + "integrity": "sha512-aeeWnefoRHuH7eYekQLq/vAsTbg6RQi7mKP49pLfxY/nfTsBnLtat9KCD7WF3Nunu41uN5uq3LVvoqRJ09S/fA==", "license": "Apache-2.0" }, "node_modules/@vercel/h3": { - "version": "0.1.116", - "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.116.tgz", - "integrity": "sha512-7IS5u3UYSFMS/0HSUjZflyLmR1r7233eJWEatJH9gMB37GOB9nW2Lk1TqU3ehRLJUvGwcT1FOlnEaQR+HDVljQ==", + "version": "0.1.124", + "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.124.tgz", + "integrity": "sha512-IbHDpvTue91iI1W84YrNBk2a7RFP2VTP8elUyhrWRoKz15DrOkatWGp0Ugrfelv3Hv3x3C/WJO7DPYtIB0mW7A==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0" + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1" } }, "node_modules/@vercel/hono": { - "version": "0.2.110", - "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.2.110.tgz", - "integrity": "sha512-OsfUoX0DLbAUUSHzzqY8Rh+RizQtG+gfPwX3W0AJlD1r+JpyczxyiqTavbX2jd2rFnGNKJHdnvrUsjid4xpB8w==", + "version": "0.2.118", + "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.2.118.tgz", + "integrity": "sha512-vgIpE3zYLiE45G6bsbl0w4g+UlJO+VxrvFFPF4aHnhafIecxcwuPzYCPoPQk1zIs6SHuNJWuF0KwxN1/VebFAA==", "license": "Apache-2.0", "dependencies": { "@vercel/nft": "1.10.0", - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0", + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1", "fs-extra": "11.1.0", "path-to-regexp": "8.3.0", "ts-morph": "12.0.0", @@ -1835,39 +1922,39 @@ } }, "node_modules/@vercel/hydrogen": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.4.0.tgz", - "integrity": "sha512-gf3ELmAjcia7WNGNHAB/rFWFU0l5fJ7mTMgGC5hvcCjSIE4kp8WWuGYiTQgQ8W6GF/1FJAxa2J3BhY/yxjY8tA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.4.2.tgz", + "integrity": "sha512-TPZ4U1MdQuTa9PcT5Mth7sCnkWjdXfGcNWQKirRZ62KKTpZTVW8CG2RzxK/YKwhnB1lL8owgnrCreqDR1xxjJg==", "license": "Apache-2.0", "dependencies": { - "@vercel/static-config": "3.4.0", + "@vercel/static-config": "3.4.1", "ts-morph": "12.0.0" } }, "node_modules/@vercel/koa": { - "version": "0.1.90", - "resolved": "https://registry.npmjs.org/@vercel/koa/-/koa-0.1.90.tgz", - "integrity": "sha512-qZNfHLs81cwsLT1AlIO9aUpIK1YjiUtYHqtThXdIqkx9jQIfHIFONLz3TRaIke45HEfU6QKtplkxhPIzQ+x1IQ==", + "version": "0.1.98", + "resolved": "https://registry.npmjs.org/@vercel/koa/-/koa-0.1.98.tgz", + "integrity": "sha512-gWVjjtlnf6RntElW7giK8yc84GVaM4dblOfqJb1xSVVnuYF33lCW3B/uYPdP3nla5+hHOdroUJCSdqzKmoo3Bw==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0" + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1" } }, "node_modules/@vercel/nestjs": { - "version": "0.2.111", - "resolved": "https://registry.npmjs.org/@vercel/nestjs/-/nestjs-0.2.111.tgz", - "integrity": "sha512-3Bpp1KXkcvE5CMaUFRQsBXdK61JSoLdcLDKtpMVgUZ23gDjpeWRelEyBO523iy3WgN1+AWzcdtyGlGDarfOfmg==", + "version": "0.2.119", + "resolved": "https://registry.npmjs.org/@vercel/nestjs/-/nestjs-0.2.119.tgz", + "integrity": "sha512-3la5VWoUJUdutFvhruw4E4LRb6av6tlq0yuMhIAOkZLWAejvH8gBUcj7pptb+dbejagNYJJVgcv0ogukoT3w3Q==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.9.3", - "@vercel/static-config": "3.4.0" + "@vercel/node": "5.10.1", + "@vercel/static-config": "3.4.1" } }, "node_modules/@vercel/next": { - "version": "4.20.5", - "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.20.5.tgz", - "integrity": "sha512-a8CyH+/0JlvGfqeeEiBqOeG3kvQVzJsRHqw3rkXiqwNQHyLHVBJcufAPx5VxyA/7SpdzJG6jFTD9sm8FIwPmgw==", + "version": "4.21.6", + "resolved": "https://registry.npmjs.org/@vercel/next/-/next-4.21.6.tgz", + "integrity": "sha512-sM1UYwCMpHx9Q60+TuN+ccNrrxDfq3Y87FQglWqBWkLAwZ1mU+6tsyBDSusjIHtLzk+qZivuTfl/YbsHqIARLA==", "license": "Apache-2.0", "dependencies": { "@vercel/nft": "1.10.0" @@ -1900,19 +1987,19 @@ } }, "node_modules/@vercel/node": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.9.3.tgz", - "integrity": "sha512-KkAYFVyrRVm9nYLdk5zVIbAra4H9ZUmLyjDnMNe3+yy5GUtC/jmBVp1fl9cf1CejMNMBu7apcrRN5nX0lhj2xw==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.10.1.tgz", + "integrity": "sha512-muj+t8sZ2XHQDkWcHxkql2rbvr/HhZOqYdZBG7pw8F5RLasL3o0gjHLXJKwHAEHp2I3fd3AgbMud2oz+hzeV0g==", "license": "Apache-2.0", "dependencies": { "@edge-runtime/node-utils": "2.3.0", "@edge-runtime/primitives": "4.1.0", "@edge-runtime/vm": "3.2.0", "@types/node": "20.11.0", - "@vercel/build-utils": "13.36.3", - "@vercel/error-utils": "2.2.0", + "@vercel/build-utils": "14.1.1", + "@vercel/error-utils": "2.2.1", "@vercel/nft": "1.10.0", - "@vercel/static-config": "3.4.0", + "@vercel/static-config": "3.4.1", "async-listen": "3.0.0", "cjs-module-lexer": "1.2.3", "edge-runtime": "2.5.9", @@ -1989,18 +2076,18 @@ "license": "MIT" }, "node_modules/@vercel/python": { - "version": "6.54.1", - "resolved": "https://registry.npmjs.org/@vercel/python/-/python-6.54.1.tgz", - "integrity": "sha512-RnkRLcRB4GkoUNlZl1uSQyzADJGTgRqj1UzWA93rixKvobO2n0LU5rqztOYnhE1Jb8ZlF7Ncnr9dXhQHy9KNRg==", + "version": "6.57.1", + "resolved": "https://registry.npmjs.org/@vercel/python/-/python-6.57.1.tgz", + "integrity": "sha512-qbo8rOdE0oxpCxPF6/yt0b8/LrXf6UBBdjZ4Wlfg28wCkWGfDVMyvQ77HGc6fGg0+5HTUgnm6j03yO2VBe0VxA==", "license": "Apache-2.0", "dependencies": { - "@vercel/python-analysis": "0.12.0" + "@vercel/python-analysis": "0.13.2" } }, "node_modules/@vercel/python-analysis": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@vercel/python-analysis/-/python-analysis-0.12.0.tgz", - "integrity": "sha512-T9YgtINVJfZmDhXe6ULKoLC1Zr3LU3Cl4CgC+m+S1KsNDPlfGfXdr93K7aOqkMaJEDLpUH8dqrPP3/TuZXTjRw==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@vercel/python-analysis/-/python-analysis-0.13.2.tgz", + "integrity": "sha512-IEr5K2gvX143NBoQc1W4BWrdDWjZwxnIT6UrL5Y1dnyH7Cqc4AV00FIAddB1YpnIZBJwT4ZhE8QbgqBeO6C9Zw==", "license": "Apache-2.0", "dependencies": { "@bytecodealliance/preview2-shim": "0.17.6", @@ -2036,13 +2123,13 @@ } }, "node_modules/@vercel/redwood": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.5.0.tgz", - "integrity": "sha512-LO24CbieV57rGAqrq5n5z/B+fMYeUqbE/Ge3qMeKRuS3Q9awgcBgB6WYLCe8crHM7XJd5AZjbuyoS/6k3r0X0w==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.5.2.tgz", + "integrity": "sha512-kvbWFI0PKoru1T/m6/Qhb/Opu7qc7MPy8l5IKdIkcx00kgAq1YMjzqG6JtzddmnmxD3DByL5uXUv90eYbGqd9A==", "license": "Apache-2.0", "dependencies": { "@vercel/nft": "1.10.0", - "@vercel/static-config": "3.4.0", + "@vercel/static-config": "3.4.1", "semver": "6.3.1", "ts-morph": "12.0.0" } @@ -2057,14 +2144,14 @@ } }, "node_modules/@vercel/remix-builder": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.9.1.tgz", - "integrity": "sha512-s0SpfV640nmQ1BsKCPMYugGrH/V+319onTo2ZILSmsy6NTBlmeN0zJU9nPcP8dBEotGqtp68NfOlOUUdrVBzkw==", + "version": "5.9.5", + "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.9.5.tgz", + "integrity": "sha512-+Zx28QACFBTF+I3GJdpVKuG3KCeT+xIGVODw91PrdcRul9cWWzRdarnreNNnf5QmuAaL24ZUSL2M2r8kYE0tsA==", "license": "Apache-2.0", "dependencies": { - "@vercel/error-utils": "2.2.0", + "@vercel/error-utils": "2.2.1", "@vercel/nft": "1.10.0", - "@vercel/static-config": "3.4.0", + "@vercel/static-config": "3.4.1", "path-to-regexp": "6.1.0", "path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "ts-morph": "12.0.0" @@ -2083,9 +2170,9 @@ "license": "Apache-2.0" }, "node_modules/@vercel/rust": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vercel/rust/-/rust-1.4.0.tgz", - "integrity": "sha512-/zRJtaf3pvdxZ7+tShmIo8StdbkCSBDcY7Gy7LOwNTIxm6GU9vkS+BlCwJHkOu6qNkbcSRH6ZQIeo4vNmqzKdQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@vercel/rust/-/rust-1.4.2.tgz", + "integrity": "sha512-vWVSMhj+3cMjQxj03jZTCNa94M0o+roVBA5wwfadxNMP8rCqdvZ0aamT/8zGCtjZ13PJc9v2W2nq0dlaaOZf4Q==", "license": "Apache-2.0", "dependencies": { "execa": "5", @@ -2205,21 +2292,21 @@ } }, "node_modules/@vercel/static-build": { - "version": "2.11.13", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.11.13.tgz", - "integrity": "sha512-FShOZZpebAcCJuF+XejFeSmw9htNFHne/iVtroXaZvj3PJ+SDbLN2VFIRFwFGg5CZgDsbSN9N5caDbOSgQ7m9Q==", + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.12.7.tgz", + "integrity": "sha512-zq/p/h6YFUuPkXEdqZa2DwoHC88z3pGKfLFeepYC1kd0cLqCLGhLhbFizLrYRQEPpncpdJvHjBEfErlyKG7MOA==", "license": "Apache-2.0", "dependencies": { - "@vercel/gatsby-plugin-vercel-analytics": "1.0.11", - "@vercel/gatsby-plugin-vercel-builder": "2.2.33", - "@vercel/static-config": "3.4.0", + "@vercel/gatsby-plugin-vercel-analytics": "1.0.12", + "@vercel/gatsby-plugin-vercel-builder": "2.2.41", + "@vercel/static-config": "3.4.1", "ts-morph": "12.0.0" } }, "node_modules/@vercel/static-config": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.4.0.tgz", - "integrity": "sha512-wCq90CMUB//ggnFh77NQO1xaLFsS4LigQIqKrH6ohnr9Br/KI1FhlErx62WfCOuueWaW+LVsbLOqNXIUjK8t6A==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.4.1.tgz", + "integrity": "sha512-kJKTyOg25JDRgDkHEkc+vWlvURxmSQkVKyRPO4EEGD/8HpJT+4u9Z/VGxwnCZ6zZBxYPpma283qBsHwY0gXjfw==", "license": "Apache-2.0", "dependencies": { "ajv": "8.6.3", @@ -2227,6 +2314,58 @@ "ts-morph": "12.0.0" } }, + "node_modules/@vercel/vc-native-darwin-arm64": { + "version": "59.1.3", + "resolved": "https://registry.npmjs.org/@vercel/vc-native-darwin-arm64/-/vc-native-darwin-arm64-59.1.3.tgz", + "integrity": "sha512-9HlFE5IzyHwfPjlxImvaY/6Q2+R8QDblLevaVn0UqogJbGsIgC7hOCAs4VABNJE7Poxq8VdtmF0XTijkPBkFsA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vercel/vc-native-darwin-x64": { + "version": "59.1.3", + "resolved": "https://registry.npmjs.org/@vercel/vc-native-darwin-x64/-/vc-native-darwin-x64-59.1.3.tgz", + "integrity": "sha512-OzraluZAteaoGW+EaLsXRmW4D3mKvpWCnlXc+uwLtIha3OKBC9IOHm6H7rVeeyqyW1gEwmntHb8JuBq/cglDSA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vercel/vc-native-linux-arm64": { + "version": "59.1.3", + "resolved": "https://registry.npmjs.org/@vercel/vc-native-linux-arm64/-/vc-native-linux-arm64-59.1.3.tgz", + "integrity": "sha512-1S3g6o8GnI23eQUb4btmmu8H5YzIggZo0rwSkqLqWdCpHT0CMfN/d/A73YE1kkEwcNfXgcnO5HT8d3Bti4AIdw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vercel/vc-native-linux-x64": { + "version": "59.1.3", + "resolved": "https://registry.npmjs.org/@vercel/vc-native-linux-x64/-/vc-native-linux-x64-59.1.3.tgz", + "integrity": "sha512-ihohS24kl4zBoAKH/9Rs7jMgXC1CGt7XyeD1yPgIBA3op/BJE9o02FGJst+HSpsSusK0mY09eDvQtdURtu3dog==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@workflow/serde": { "version": "4.1.0-beta.2", "resolved": "https://registry.npmjs.org/@workflow/serde/-/serde-4.1.0-beta.2.tgz", @@ -2820,9 +2959,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.1.tgz", - "integrity": "sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", + "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -4148,38 +4287,52 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, "node_modules/vercel": { - "version": "58.4.4", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-58.4.4.tgz", - "integrity": "sha512-Mv1807Ptxhy6cQne5xV/2dD+bUGYRtpV3sLVPXEW115RBN6K/ssuvOww8eNfdGucFH9C+p5ccQF07XSyAvBPLQ==", + "version": "59.1.3", + "resolved": "https://registry.npmjs.org/vercel/-/vercel-59.1.3.tgz", + "integrity": "sha512-sxCp4+S0QlO+LEvGxboxB5tbDZvVE4gO2YeRuGvdamK5CYHTOK4WDHE3u+E8VIe8FVK9mtjKeo4Jnxez5MfNdw==", "license": "Apache-2.0", "dependencies": { - "@vercel/backends": "0.8.30", - "@vercel/blob": "2.4.0", - "@vercel/build-utils": "13.36.3", - "@vercel/cli-auth": "0.3.1", - "@vercel/cli-config": "0.2.1", - "@vercel/container": "0.1.0", - "@vercel/detect-agent": "1.2.3", - "@vercel/elysia": "0.1.107", - "@vercel/express": "0.1.121", - "@vercel/fastify": "0.1.110", + "@vercel/backends": "0.8.38", + "@vercel/blob": "2.8.0", + "@vercel/build-utils": "14.1.1", + "@vercel/cli-auth": "0.3.4", + "@vercel/cli-config": "0.2.3", + "@vercel/container": "0.2.0", + "@vercel/detect-agent": "1.2.5", + "@vercel/elysia": "0.1.115", + "@vercel/express": "0.1.129", + "@vercel/fastify": "0.1.118", "@vercel/fun": "1.3.0", - "@vercel/go": "3.10.2", - "@vercel/h3": "0.1.116", - "@vercel/hono": "0.2.110", - "@vercel/hydrogen": "1.4.0", - "@vercel/koa": "0.1.90", - "@vercel/nestjs": "0.2.111", - "@vercel/next": "4.20.5", - "@vercel/node": "5.9.3", + "@vercel/go": "3.11.0", + "@vercel/h3": "0.1.124", + "@vercel/hono": "0.2.118", + "@vercel/hydrogen": "1.4.2", + "@vercel/koa": "0.1.98", + "@vercel/nestjs": "0.2.119", + "@vercel/next": "4.21.6", + "@vercel/node": "5.10.1", "@vercel/prepare-flags-definitions": "0.3.0", - "@vercel/python": "6.54.1", - "@vercel/redwood": "2.5.0", - "@vercel/remix-builder": "5.9.1", + "@vercel/python": "6.57.1", + "@vercel/python-analysis": "0.13.2", + "@vercel/redwood": "2.5.2", + "@vercel/remix-builder": "5.9.5", "@vercel/ruby": "2.5.1", - "@vercel/rust": "1.4.0", - "@vercel/static-build": "2.11.13", + "@vercel/rust": "1.4.2", + "@vercel/static-build": "2.12.7", "chokidar": "4.0.0", "esbuild": "0.27.0", "jose": "5.9.6", @@ -4188,6 +4341,7 @@ "sandbox": "3.4.0", "smol-toml": "1.5.2", "undici": "5.29.0", + "uuid": "14.0.1", "zod": "4.1.11" }, "bin": { @@ -4196,6 +4350,12 @@ }, "engines": { "node": ">= 18" + }, + "optionalDependencies": { + "@vercel/vc-native-darwin-arm64": "59.1.3", + "@vercel/vc-native-darwin-x64": "59.1.3", + "@vercel/vc-native-linux-arm64": "59.1.3", + "@vercel/vc-native-linux-x64": "59.1.3" } }, "node_modules/web-vitals": { diff --git a/.github/release/vercel-cli/package.json b/.github/release/vercel-cli/package.json index 6ff0ba4a891d..e95f2863c229 100644 --- a/.github/release/vercel-cli/package.json +++ b/.github/release/vercel-cli/package.json @@ -3,6 +3,6 @@ "private": true, "version": "1.0.0", "dependencies": { - "vercel": "58.4.4" + "vercel": "59.1.3" } } diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 3c79b64d694c..de26ab0c3467 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -37,7 +37,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" jobs: publish_signed_android_apk: @@ -47,7 +47,7 @@ jobs: environment: android-release steps: - name: Checkout release tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ inputs.tag }} fetch-depth: 0 @@ -187,7 +187,7 @@ jobs: - name: Checkout encrypted Android signing assets if: ${{ steps.release_source.outputs.fallback_base_tag == '' }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/apps-signing ref: main @@ -352,7 +352,7 @@ jobs: fi - name: Attest Android APK provenance - uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0 + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 with: subject-path: dist/OpenClaw-Android.apk diff --git a/.github/workflows/auto-response.yml b/.github/workflows/auto-response.yml index 7612fd836926..06b7a53377e4 100644 --- a/.github/workflows/auto-response.yml +++ b/.github/workflows/auto-response.yml @@ -31,7 +31,7 @@ jobs: pull-requests: write runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} persist-credentials: false diff --git a/.github/workflows/ci-build-artifacts-testbox.yml b/.github/workflows/ci-build-artifacts-testbox.yml index 0310b4abbc42..f05425af6d53 100644 --- a/.github/workflows/ci-build-artifacts-testbox.yml +++ b/.github/workflows/ci-build-artifacts-testbox.yml @@ -42,7 +42,7 @@ jobs: testbox_id: ${{ inputs.testbox_id }} - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: ${{ github.event_name == 'pull_request' && '2' || '0' }} persist-credentials: false @@ -107,7 +107,7 @@ jobs: - name: Restore dist build cache id: dist-cache - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .artifacts/build-all-cache/ @@ -146,7 +146,7 @@ jobs: - name: Save dist build cache if: steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.dist-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .artifacts/build-all-cache/ diff --git a/.github/workflows/ci-check-arm-testbox.yml b/.github/workflows/ci-check-arm-testbox.yml index 775f57f2763a..ebae1c2e72bc 100644 --- a/.github/workflows/ci-check-arm-testbox.yml +++ b/.github/workflows/ci-check-arm-testbox.yml @@ -33,7 +33,7 @@ jobs: timeout-minutes: 120 steps: - name: Begin Testbox - uses: useblacksmith/begin-testbox@d0e04585c26905fdd92c94a09c159544c7ee1b67 + uses: useblacksmith/begin-testbox@233448af4bfdc6fca509a7f0974411ac6d8a8043 # v2 with: testbox_id: ${{ inputs.testbox_id }} - name: Verify ARM runner @@ -52,7 +52,7 @@ jobs: ;; esac - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: ${{ github.event_name == 'pull_request' && '2' || '0' }} persist-credentials: false diff --git a/.github/workflows/ci-check-testbox.yml b/.github/workflows/ci-check-testbox.yml index 3f58bb0074d0..63e761fc2373 100644 --- a/.github/workflows/ci-check-testbox.yml +++ b/.github/workflows/ci-check-testbox.yml @@ -43,7 +43,7 @@ jobs: with: testbox_id: ${{ inputs.testbox_id }} - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # Dispatch hydrates the pinned workflow ref; changed-gate sync later # reconstructs its exact base and final tree. PR validation keeps both commits. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 096b3f48584e..e84ea775d9ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -141,7 +141,7 @@ jobs: android_matrix: ${{ steps.manifest.outputs.android_matrix }} steps: - name: Checkout trusted CI harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .ci-harness @@ -500,7 +500,7 @@ jobs: fi - name: Setup manifest TypeScript runtime - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -1041,7 +1041,7 @@ jobs: steps: - name: Checkout if: github.event_name != 'workflow_dispatch' || inputs.target_ref == '' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 persist-credentials: false @@ -1095,7 +1095,7 @@ jobs: git -C "$GITHUB_WORKSPACE" checkout --detach refs/remotes/origin/checkout - name: Checkout trusted CI harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .ci-harness @@ -1156,11 +1156,11 @@ jobs: - name: Scan pull request for leaked credentials if: github.event_name == 'pull_request' - uses: trufflesecurity/trufflehog@27b0417c16317ca9a472a9a8092acce143b49c55 # v3.95.9 + uses: trufflesecurity/trufflehog@bcfcf73aaf4759d4dadc2783177c245a02792318 # v3.97.0 with: base: ${{ steps.diff_base.outputs.sha }} head: ${{ github.sha }} - version: "3.95.9@sha256:59b244249d1a1aef4baa24fe73d3c931616264482580d806d77f6c74d26b3e42" + version: "3.97.0@sha256:ff4c95e9df7d645daf2140e3ca1039031c63106268d5fbb25feb43ceca1bcc33" extra_args: --results=verified,unknown --fail-on-scan-errors - name: Prepare trusted pre-commit config @@ -1197,7 +1197,7 @@ jobs: echo "python-version=${version}" >> "$GITHUB_OUTPUT" - name: Install pre-commit - run: python3 -m pip install --disable-pip-version-check pre-commit==4.2.0 + run: python3 -m pip install --disable-pip-version-check pre-commit==4.6.2 - name: Detect committed private keys run: pre-commit run --config "${PRE_COMMIT_CONFIG_PATH:-.pre-commit-config.yaml}" --all-files detect-private-key @@ -1352,7 +1352,7 @@ jobs: - name: Restore build-all step cache if: needs.preflight.outputs.cache_mode != 'off' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .artifacts/build-all-cache key: ${{ runner.os }}-build-all-v4-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'scripts/build-all.mts', 'scripts/runtime-postbuild.mjs', 'scripts/runtime-postbuild.mts', 'scripts/lib/tsx-cli-shim.mjs', 'scripts/write-plugin-sdk-entry-dts.ts', 'scripts/lib/plugin-sdk-entries.mts', 'scripts/lib/plugin-sdk-entrypoints.json', 'scripts/lib/plugin-sdk-private-local-only-subpaths.json', 'scripts/lib/plugin-sdk-deprecated-public-subpaths.json', 'scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json', 'tsconfig.json', 'tsconfig.plugin-sdk.dts.json', 'src/**', 'packages/**', '!src/**/dist/**', '!src/**/node_modules/**', '!packages/**/dist/**', '!packages/**/node_modules/**') }} @@ -1362,7 +1362,7 @@ jobs: - name: Restore dist build cache id: dist_build_cache if: needs.preflight.outputs.cache_mode != 'off' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | dist/ @@ -1704,7 +1704,7 @@ jobs: - &cache_playwright_chromium name: Cache Playwright Chromium if: needs.preflight.outputs.cache_mode != 'off' && needs.preflight.outputs.compatibility_target != 'true' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-chromium-1.62.1 @@ -2336,7 +2336,7 @@ jobs: uses: ./.ci-harness/.github/actions/setup-node-env with: cache-mode: ${{ needs.preflight.outputs.cache_mode }} - node-version: "22.22.3" + node-version: "22.23.2" install-bun: "false" build-all-cache-scope: full @@ -2386,9 +2386,9 @@ jobs: if: matrix.requires_go == true # The current workflow validates frozen targets whose go.mod may predate this patch pin. # Keep the runner toolchain owned by the workflow; cache publication is gated separately. - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: - go-version: "1.25.12" + go-version: "1.26.6" cache: false - name: Resolve docs i18n Go cache @@ -2415,14 +2415,14 @@ jobs: - name: Restore docs i18n Go cache id: docs-i18n-go-cache if: matrix.requires_go == true && needs.preflight.outputs.cache_mode != 'off' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ steps.docs-i18n-go-cache-key.outputs.paths }} key: ${{ steps.docs-i18n-go-cache-key.outputs.key }} - name: Verify docs i18n Go toolchain if: matrix.requires_go == true - run: test "$(go env GOVERSION)" = "go1.25.12" + run: test "$(go env GOVERSION)" = "go1.26.6" - name: Configure Node test resources # Scale the in-process Vitest worker budget with the cores the job @@ -2454,7 +2454,7 @@ jobs: # Keep its implementation pinned to this workflow revision, while tests # continue to run against the checked-out candidate. if: ${{ hashFiles('scripts/ci-run-node-test-shard.mts') == '' }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .ci-workflow @@ -2504,7 +2504,7 @@ jobs: - name: Save docs i18n Go cache if: always() && matrix.requires_go == true && needs.preflight.outputs.cache_write_allowed == 'true' && steps.docs-i18n-go-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ steps.docs-i18n-go-cache-key.outputs.paths }} key: ${{ steps.docs-i18n-go-cache.outputs.cache-primary-key }} @@ -2572,7 +2572,7 @@ jobs: - name: Cache extension package boundary artifacts for hosted lint if: needs.preflight.outputs.cache_mode != 'off' && matrix.task == 'lint' && (vars.OPENCLAW_CI_RUNNER_BACKEND == 'github' || vars.OPENCLAW_CI_RUNNER_BACKEND == 'hybrid' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository)) - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | dist/plugin-sdk @@ -2589,7 +2589,7 @@ jobs: # protected boundary lane may publish this repository-global snapshot. - name: Mount extension boundary sticky disk if: matrix.task == 'lint' && vars.OPENCLAW_CI_RUNNER_BACKEND != 'github' && vars.OPENCLAW_CI_RUNNER_BACKEND != 'hybrid' && github.event_name != 'workflow_dispatch' && github.repository == 'openclaw/openclaw' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'openclaw/openclaw') - uses: useblacksmith/stickydisk@6d373c96a74cbde0c99fedc5ea5d3a7ba66ba494 # main (post-v1.4.0 hot-attach fix) + uses: useblacksmith/stickydisk@35ba2e331a80056a42af053ee54968511de2b7c7 # v1.5.0 with: # One stable disk for the whole repository. The v1 per-PR/per-config # keys minted a new backing disk for every PR and toolchain change @@ -3020,7 +3020,7 @@ jobs: # repository-global snapshots, so they keep the GitHub cache path. - name: Mount extension boundary sticky disk if: matrix.group == 'extension-package-boundary' && vars.OPENCLAW_CI_RUNNER_BACKEND != 'github' && vars.OPENCLAW_CI_RUNNER_BACKEND != 'hybrid' && github.event_name != 'workflow_dispatch' && github.repository == 'openclaw/openclaw' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'openclaw/openclaw') - uses: useblacksmith/stickydisk@6d373c96a74cbde0c99fedc5ea5d3a7ba66ba494 # main (post-v1.4.0 hot-attach fix) + uses: useblacksmith/stickydisk@35ba2e331a80056a42af053ee54968511de2b7c7 # v1.5.0 with: # One stable disk for the whole repository. The v1 per-PR/per-config # keys minted a new backing disk for every PR and toolchain change @@ -3070,7 +3070,7 @@ jobs: - name: Cache extension package boundary artifacts id: extension-package-boundary-cache if: needs.preflight.outputs.cache_mode != 'off' && matrix.group == 'extension-package-boundary' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | dist/plugin-sdk @@ -3370,7 +3370,7 @@ jobs: git -C "$GITHUB_WORKSPACE" checkout --detach refs/remotes/origin/checkout - name: Setup Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.12" @@ -3666,7 +3666,7 @@ jobs: - name: Restore SwiftPM cache id: swiftpm-cache if: needs.preflight.outputs.cache_mode != 'off' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/Library/Caches/org.swift.swiftpm key: ${{ runner.os }}-swiftpm-${{ hashFiles('apps/macos/Package.resolved') }} @@ -3676,7 +3676,7 @@ jobs: - name: Restore Swift build directory cache id: swift-build-cache if: needs.preflight.outputs.cache_mode != 'off' - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: apps/macos/.build key: ${{ runner.os }}-swift-build-v3-${{ steps.swift-toolchain.outputs.key }}-${{ hashFiles('apps/macos/Package.swift', 'apps/macos/Package.resolved', 'apps/macos/Sources/**', 'apps/macos/Tests/**', 'apps/shared/OpenClawKit/Package.swift', 'apps/shared/OpenClawKit/Sources/**', 'apps/swabble/Package.swift', 'apps/swabble/Sources/**') }} @@ -3812,14 +3812,14 @@ jobs: - name: Save SwiftPM cache if: needs.preflight.outputs.cache_write_allowed == 'true' && steps.swiftpm-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/Library/Caches/org.swift.swiftpm key: ${{ steps.swiftpm-cache.outputs.cache-primary-key }} - name: Save Swift build directory cache if: needs.preflight.outputs.cache_write_allowed == 'true' && steps.swift-build-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: apps/macos/.build key: ${{ steps.swift-build-cache.outputs.cache-primary-key }} @@ -3840,7 +3840,7 @@ jobs: - name: Select Xcode 26 run: | set -euo pipefail - for xcode_app in /Applications/Xcode_26.5.app /Applications/Xcode-26.5.0.app; do + for xcode_app in /Applications/Xcode_26.6.app /Applications/Xcode-26.6.0.app; do if [ -d "$xcode_app/Contents/Developer" ]; then sudo xcode-select -s "$xcode_app/Contents/Developer" break @@ -3848,8 +3848,8 @@ jobs: done xcodebuild -version xcode_version="$(xcodebuild -version | awk 'NR == 1 { print $2 }')" - if [[ "$xcode_version" != 26.* ]]; then - echo "error: expected Xcode 26.x, got $xcode_version" >&2 + if [[ "$xcode_version" != 26.6* ]]; then + echo "error: expected Xcode 26.6, got $xcode_version" >&2 exit 1 fi swift --version @@ -4064,7 +4064,7 @@ jobs: exit 1 - name: Checkout CI Android toolchain action - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .ci-harness @@ -4094,7 +4094,7 @@ jobs: # runs-on already selects non-Blacksmith ubuntu-24.04 runners). - name: Mount Gradle sticky disk if: vars.OPENCLAW_CI_RUNNER_BACKEND != 'github' && !(vars.OPENCLAW_CI_RUNNER_BACKEND == 'hybrid' && github.run_attempt > 1) && github.event_name != 'workflow_dispatch' && github.repository == 'openclaw/openclaw' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'openclaw/openclaw') - uses: useblacksmith/stickydisk@6d373c96a74cbde0c99fedc5ea5d3a7ba66ba494 # main (post-v1.4.0 hot-attach fix) + uses: useblacksmith/stickydisk@35ba2e331a80056a42af053ee54968511de2b7c7 # v1.5.0 with: # One stable disk per matrix task. The v1 per-PR/per-dependency-hash # keys minted a new backing disk for every PR and dependency bump diff --git a/.github/workflows/codeql-android-critical-security.yml b/.github/workflows/codeql-android-critical-security.yml index d4845ea53add..70b4e9881bad 100644 --- a/.github/workflows/codeql-android-critical-security.yml +++ b/.github/workflows/codeql-android-critical-security.yml @@ -24,12 +24,12 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Setup Java - uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5 + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 with: distribution: temurin java-version: "21" @@ -41,7 +41,7 @@ jobs: install-bun: "false" - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: java-kotlin build-mode: manual @@ -52,6 +52,6 @@ jobs: run: ./gradlew --no-daemon :app:assemblePlayDebug - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-security/android" diff --git a/.github/workflows/codeql-critical-quality.yml b/.github/workflows/codeql-critical-quality.yml index 580c1a5e8998..c3856fd6e4a8 100644 --- a/.github/workflows/codeql-critical-quality.yml +++ b/.github/workflows/codeql-critical-quality.yml @@ -335,18 +335,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-core-auth-secrets-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/core-auth-secrets" @@ -358,18 +358,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-config-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/config-boundary" @@ -381,18 +381,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-gateway-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/gateway-runtime-boundary" @@ -404,18 +404,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-channel-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/channel-runtime-boundary" @@ -427,7 +427,7 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false @@ -488,7 +488,7 @@ jobs: - name: Initialize CodeQL if: ${{ github.event_name != 'pull_request' || steps.network-diff-scan.outputs.full_codeql == 'true' }} - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-network-runtime-boundary-critical-quality.yml @@ -496,7 +496,7 @@ jobs: - name: Analyze id: analyze if: ${{ github.event_name != 'pull_request' || steps.network-diff-scan.outputs.full_codeql == 'true' }} - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: output: sarif-results category: "/codeql-critical-quality/network-runtime-boundary" @@ -541,18 +541,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-agent-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/agent-runtime-boundary" @@ -564,18 +564,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-mcp-process-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/mcp-process-runtime-boundary" @@ -587,18 +587,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-memory-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/memory-runtime-boundary" @@ -610,18 +610,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-session-diagnostics-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/session-diagnostics-boundary" @@ -633,18 +633,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-plugin-sdk-reply-runtime-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/plugin-sdk-reply-runtime" @@ -656,18 +656,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-provider-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/provider-runtime-boundary" @@ -678,18 +678,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-ui-control-plane-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/ui-control-plane" @@ -700,18 +700,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-web-media-runtime-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/web-media-runtime-boundary" @@ -723,18 +723,18 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-plugin-boundary-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/plugin-boundary" @@ -746,17 +746,17 @@ jobs: timeout-minutes: 25 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: javascript-typescript config-file: ./.github/codeql/codeql-plugin-sdk-package-contract-critical-quality.yml - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-critical-quality/plugin-sdk-package-contract" diff --git a/.github/workflows/codeql-macos-critical-security.yml b/.github/workflows/codeql-macos-critical-security.yml index cc7556b67c42..eb80acfef7a2 100644 --- a/.github/workflows/codeql-macos-critical-security.yml +++ b/.github/workflows/codeql-macos-critical-security.yml @@ -20,22 +20,28 @@ permissions: jobs: macos: name: Critical Security (macOS) - runs-on: blacksmith-6vcpu-macos-15 + runs-on: blacksmith-12vcpu-macos-26 timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Select Xcode run: | - sudo xcode-select -s /Applications/Xcode_26.1.app + set -euo pipefail + sudo xcode-select -s /Applications/Xcode_26.6.app/Contents/Developer xcodebuild -version + xcode_version="$(xcodebuild -version | awk 'NR == 1 { print $2 }')" + if [[ "$xcode_version" != 26.6* ]]; then + echo "error: expected Xcode 26.6, got $xcode_version" >&2 + exit 1 + fi swift --version - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: swift build-mode: manual @@ -46,7 +52,7 @@ jobs: - name: Analyze id: analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: output: sarif-results upload: failure-only @@ -83,7 +89,7 @@ jobs: done - name: Upload filtered SARIF - uses: github/codeql-action/upload-sarif@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: sarif_file: sarif-results-filtered category: "/codeql-critical-security/macos" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index dfb845d82f6d..2b02d51761d5 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -104,13 +104,13 @@ jobs: steps: - name: Checkout if: ${{ matrix.category != 'actions' }} - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Checkout Actions security sources if: ${{ matrix.category == 'actions' }} - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false sparse-checkout: | @@ -119,12 +119,12 @@ jobs: .github/codeql - name: Initialize CodeQL - uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: languages: ${{ matrix.language }} config-file: ${{ matrix.config_file }} - name: Analyze - uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1 + uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 with: category: "/codeql-security-high/${{ matrix.category }}" diff --git a/.github/workflows/control-ui-locale-refresh.yml b/.github/workflows/control-ui-locale-refresh.yml index 044ed0f36b8f..ad2f4e33737e 100644 --- a/.github/workflows/control-ui-locale-refresh.yml +++ b/.github/workflows/control-ui-locale-refresh.yml @@ -85,7 +85,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve-base.outputs.sha }} persist-credentials: false @@ -157,7 +157,7 @@ jobs: name: Refresh ${{ matrix.locale }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve-base.outputs.sha }} persist-credentials: false @@ -278,7 +278,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve-base.outputs.sha }} fetch-depth: 0 diff --git a/.github/workflows/crabbox-hydrate.yml b/.github/workflows/crabbox-hydrate.yml index 14c7f8030a2b..5c5646c7db9a 100644 --- a/.github/workflows/crabbox-hydrate.yml +++ b/.github/workflows/crabbox-hydrate.yml @@ -44,12 +44,12 @@ jobs: runs-on: [self-hosted, "${{ inputs.crabbox_runner_label }}"] timeout-minutes: 120 steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref || github.ref }} - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24" @@ -322,15 +322,15 @@ jobs: case "$arch" in aarch64|arm64) buildx_arch=arm64 - buildx_sha256=c4248d6cbc4a619a7e0b4609c11e509ad4ac0b475e1c64817c0ac20c5d90c766 + buildx_sha256=5d0cafd9d16afe1a0f0d9529885344ace2cc99efdd531b6c783c5455a6001569 ;; x86_64|amd64) buildx_arch=amd64 - buildx_sha256=d41ece72044243b4f58b343441ae37446d9c29a7d6b5e11c61847bbcf8f7dfda + buildx_sha256=48af8a397ebd60178778bf63611dbcebe5f5e7a9be90eb9147b24b9587455778 ;; *) echo "unsupported buildx arch: $arch" >&2; exit 2 ;; esac - buildx_version="v0.35.0" + buildx_version="v0.36.1" mkdir -p "$HOME/.docker/cli-plugins" curl --fail --show-error --location \ --connect-timeout "${OPENCLAW_CRABBOX_HYDRATE_DOWNLOAD_CONNECT_TIMEOUT_SECONDS:-15}" \ @@ -444,12 +444,12 @@ jobs: runs-on: [self-hosted, "${{ inputs.crabbox_runner_label }}"] timeout-minutes: 120 steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref || github.ref }} - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24" @@ -677,7 +677,7 @@ jobs: runs-on: [self-hosted, "${{ inputs.crabbox_runner_label }}"] timeout-minutes: 120 steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref || github.ref }} diff --git a/.github/workflows/dated-todo-sweep.yml b/.github/workflows/dated-todo-sweep.yml index f4608f4a948d..cd2da36c0ca8 100644 --- a/.github/workflows/dated-todo-sweep.yml +++ b/.github/workflows/dated-todo-sweep.yml @@ -32,7 +32,7 @@ jobs: timeout-minutes: 20 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} persist-credentials: false @@ -81,7 +81,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout trusted workflow code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} persist-credentials: false diff --git a/.github/workflows/dependency-guard.yml b/.github/workflows/dependency-guard.yml index d780618d90ca..fcce3812df20 100644 --- a/.github/workflows/dependency-guard.yml +++ b/.github/workflows/dependency-guard.yml @@ -24,7 +24,7 @@ jobs: autoscrub-repository: ${{ steps.guard.outputs.autoscrub-repository }} steps: - name: Check out trusted base workflow scripts - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.event.pull_request.base.sha }} persist-credentials: false @@ -49,7 +49,7 @@ jobs: pull-requests: read steps: - name: Check out trusted base workflow scripts - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.event.pull_request.base.sha }} persist-credentials: false @@ -95,7 +95,7 @@ jobs: timeout-minutes: 5 steps: - name: Check out trusted base workflow scripts - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.event.pull_request.base.sha }} persist-credentials: false diff --git a/.github/workflows/docker-channel-promote.yml b/.github/workflows/docker-channel-promote.yml index 88927dff8091..a7327eb25597 100644 --- a/.github/workflows/docker-channel-promote.yml +++ b/.github/workflows/docker-channel-promote.yml @@ -38,7 +38,7 @@ jobs: fi - name: Checkout trusted promotion tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} fetch-depth: 0 @@ -123,7 +123,7 @@ jobs: fi - name: Checkout trusted promotion tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} persist-credentials: false @@ -146,17 +146,17 @@ jobs: done - name: Set up Docker Builder - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0 + uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Login to GitHub Container Registry - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} diff --git a/.github/workflows/docker-image-refresh.yml b/.github/workflows/docker-image-refresh.yml index e27d7f308cef..b4cc4325a282 100644 --- a/.github/workflows/docker-image-refresh.yml +++ b/.github/workflows/docker-image-refresh.yml @@ -47,7 +47,7 @@ jobs: fi - name: Checkout trusted refresh tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} fetch-depth: 0 diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index 82f98897026a..a4907828b728 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -77,7 +77,7 @@ jobs: fi - name: Checkout immutable release tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ inputs.tag }} fetch-depth: 0 @@ -111,7 +111,7 @@ jobs: channel: ${{ steps.policy.outputs.channel }} steps: - name: Checkout trusted workflow helpers - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} path: workflow-source @@ -184,7 +184,7 @@ jobs: source_sha: ${{ steps.build_provenance.outputs.source_sha }} steps: - name: Checkout selected source - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.release_sha }} fetch-depth: 0 @@ -213,7 +213,7 @@ jobs: browser_digest: ${{ steps.build-browser.outputs.digest }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_build_provenance.outputs.source_sha }} fetch-depth: 0 @@ -239,17 +239,17 @@ jobs: done - name: Set up Docker Builder - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4 + uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Login to GitHub Container Registry - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} @@ -442,24 +442,24 @@ jobs: browser_digest: ${{ steps.build-browser.outputs.digest }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_build_provenance.outputs.source_sha }} fetch-depth: 0 - *buildkit_prepull_step - name: Set up Docker Builder - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4 + uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Login to GitHub Container Registry - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} @@ -659,20 +659,20 @@ jobs: browser_supported: ${{ steps.tags.outputs.browser_supported }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_build_provenance.outputs.source_sha }} fetch-depth: 0 - name: Login to GitHub Container Registry - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} @@ -795,24 +795,24 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_build_provenance.outputs.source_sha }} fetch-depth: 1 - *buildkit_prepull_step - name: Set up Docker Builder - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4 + uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Login to GitHub Container Registry - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} diff --git a/.github/workflows/docs-agent.yml b/.github/workflows/docs-agent.yml index a8084532364f..91ae1b0168b4 100644 --- a/.github/workflows/docs-agent.yml +++ b/.github/workflows/docs-agent.yml @@ -33,7 +33,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: main fetch-depth: 0 diff --git a/.github/workflows/docs-external-links.yml b/.github/workflows/docs-external-links.yml index b6775d5a1335..fde3d741ef58 100644 --- a/.github/workflows/docs-external-links.yml +++ b/.github/workflows/docs-external-links.yml @@ -18,7 +18,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/docs-sync-publish.yml b/.github/workflows/docs-sync-publish.yml index ba7bc6a22b1b..5467cb4b0580 100644 --- a/.github/workflows/docs-sync-publish.yml +++ b/.github/workflows/docs-sync-publish.yml @@ -34,13 +34,13 @@ jobs: - name: Checkout source repo if: env.OPENCLAW_DOCS_SYNC_TOKEN != '' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - name: Checkout ClawHub docs source if: env.OPENCLAW_DOCS_SYNC_TOKEN != '' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/clawhub ref: main @@ -51,7 +51,7 @@ jobs: - name: Setup Node if: env.OPENCLAW_DOCS_SYNC_TOKEN != '' - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24.x" @@ -88,7 +88,7 @@ jobs: - name: Install docs MDX checker dependency if: env.OPENCLAW_DOCS_SYNC_TOKEN != '' working-directory: publish - run: npm install --no-save --package-lock=false @mdx-js/mdx@3.1.1 tsx@4.23.1 + run: npm install --no-save --package-lock=false @mdx-js/mdx@3.1.1 tsx@4.23.12 - name: Check publish docs MDX if: env.OPENCLAW_DOCS_SYNC_TOKEN != '' diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 3cc63801bf5a..0240af112422 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,7 +24,7 @@ jobs: timeout-minutes: 20 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -38,7 +38,7 @@ jobs: install-bun: "false" - name: Checkout ClawHub docs source - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/clawhub ref: main diff --git a/.github/workflows/duplicate-after-merge.yml b/.github/workflows/duplicate-after-merge.yml index c31c457aab4d..710bfd078151 100644 --- a/.github/workflows/duplicate-after-merge.yml +++ b/.github/workflows/duplicate-after-merge.yml @@ -35,7 +35,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Close confirmed duplicates env: APPLY: ${{ inputs.apply }} diff --git a/.github/workflows/full-release-validation.yml b/.github/workflows/full-release-validation.yml index 3a3c4216ba38..21b55f0a8c9d 100644 --- a/.github/workflows/full-release-validation.yml +++ b/.github/workflows/full-release-validation.yml @@ -164,7 +164,7 @@ env: GH_REPO: ${{ github.repository }} # Read retries and one-shot dispatch recovery share this classifier; dispatch POSTs never retry. GH_TRANSIENT_SERVER_OR_NETWORK_PATTERN: "HTTP 5[0-9][0-9]|Server Error|invalid character .* looking for beginning of value|error connecting to|context deadline exceeded|connection reset by peer|connection refused|TLS handshake timeout|i/o timeout|network is unreachable|(^|[^A-Za-z0-9_])EOF([^A-Za-z0-9_]|$)|ETIMEDOUT|ECONNRESET|EAI_AGAIN" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" RELEASE_ISOLATION_TOOLING_CONTRACT: "2" jobs: @@ -179,7 +179,7 @@ jobs: cross_os_suite_filter: ${{ steps.filters.outputs.cross_os_suite_filter }} steps: - name: Checkout trusted workflow helper - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} path: workflow @@ -242,7 +242,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Checkout target package manifest - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ steps.resolve.outputs.sha }} path: target @@ -446,7 +446,7 @@ jobs: changed_paths: ${{ steps.find.outputs.changed_paths }} steps: - name: Checkout trusted workflow helper - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} path: workflow @@ -455,7 +455,7 @@ jobs: submodules: false - name: Checkout target SHA - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_target.outputs.sha }} path: target @@ -570,7 +570,7 @@ jobs: contents: read steps: - name: Checkout target SHA - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_target.outputs.sha }} fetch-depth: 1 @@ -1085,7 +1085,7 @@ jobs: source_parent_attempt: ${{ steps.plan.outputs.source_parent_attempt }} steps: - name: Checkout release execution plan tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} sparse-checkout: | @@ -1245,7 +1245,7 @@ jobs: state: ${{ steps.state.outputs.state }} steps: - name: Checkout release decision tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} sparse-checkout: | @@ -1311,7 +1311,7 @@ jobs: performance_conclusion: ${{ steps.state.outputs.productPerformance_conclusion }} steps: - name: Checkout diagnostic drain tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} sparse-checkout: | @@ -1388,7 +1388,7 @@ jobs: timeout-minutes: 5 steps: - name: Checkout release state verifier - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} sparse-checkout: | diff --git a/.github/workflows/install-smoke-reusable.yml b/.github/workflows/install-smoke-reusable.yml index 03bf91b0391b..1e6bd1eabf78 100644 --- a/.github/workflows/install-smoke-reusable.yml +++ b/.github/workflows/install-smoke-reusable.yml @@ -72,7 +72,7 @@ jobs: NODE - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref || github.ref }} fetch-depth: 1 @@ -115,15 +115,15 @@ jobs: OPENCLAW_DOCKER_E2E_REQUIRE_LOCAL_IMAGE: "1" steps: - name: Checkout CLI - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.target_sha }} persist-credentials: false - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: Dockerfile # Keep release smoke builds bounded and log-producing. The Blacksmith # build action can leave jobs in-progress without step logs when a remote @@ -262,7 +262,7 @@ jobs: # locally before restoring the exact called-workflow revision. - &trusted_workflow_subdir_checkout_step name: Checkout trusted release harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/openclaw ref: main @@ -336,9 +336,9 @@ jobs: NODE - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: Dockerfile - name: Build local root Dockerfile smoke image env: @@ -432,7 +432,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout CLI - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.target_sha }} persist-credentials: false @@ -652,9 +652,9 @@ jobs: test -s "${RUNNER_TEMP}/candidate.tar.gz" - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: scripts/docker/install-sh-smoke/Dockerfile - name: Build pinned candidate packaging harness run: | @@ -798,9 +798,9 @@ jobs: - *trusted_workflow_subdir_identity_step - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: scripts/docker/install-sh-smoke/Dockerfile - name: Build installer smoke image env: @@ -871,9 +871,9 @@ jobs: - *trusted_workflow_subdir_identity_step - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: scripts/docker/install-sh-nonroot/Dockerfile - name: Build installer non-root image env: @@ -1468,15 +1468,15 @@ jobs: DOCKER_BUILD_RECORD_UPLOAD: "false" steps: - name: Checkout CLI - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.target_sha }} persist-credentials: false - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: scripts/e2e/Dockerfile - name: Setup Node environment for package smoke uses: ./.github/actions/setup-node-env diff --git a/.github/workflows/ios-periphery.yml b/.github/workflows/ios-periphery.yml index ac82ce8f916c..58219ca2a002 100644 --- a/.github/workflows/ios-periphery.yml +++ b/.github/workflows/ios-periphery.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout if: github.event_name == 'pull_request' && github.event.pull_request.draft == false - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 fetch-tags: false @@ -80,7 +80,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -90,7 +90,7 @@ jobs: - name: Verify Xcode run: | set -euo pipefail - for xcode_app in /Applications/Xcode_26.5.app /Applications/Xcode-26.5.0.app; do + for xcode_app in /Applications/Xcode_26.6.app /Applications/Xcode-26.6.0.app; do if [ -d "$xcode_app/Contents/Developer" ]; then sudo xcode-select -s "$xcode_app/Contents/Developer" break @@ -98,8 +98,8 @@ jobs: done xcodebuild -version xcode_version="$(xcodebuild -version | awk 'NR == 1 { print $2 }')" - if [[ "$xcode_version" != 26.* ]]; then - echo "error: expected Xcode 26.x, got $xcode_version" >&2 + if [[ "$xcode_version" != 26.6* ]]; then + echo "error: expected Xcode 26.6, got $xcode_version" >&2 exit 1 fi swift --version diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 066db975237b..eb8c04d5732f 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -63,7 +63,7 @@ jobs: permission-members: read permission-metadata: read permission-pull-requests: write - - uses: actions/labeler@b8dd2d9be0f68b860e7dae5dae7d772984eacd6d # v6 + - uses: actions/labeler@bf12e9b00b37c5c0ca2b87b79b2daf7891dbda13 # v7.0.0 if: ${{ github.event.action != 'edited' || github.event.changes.base }} with: configuration-path: .github/labeler.yml diff --git a/.github/workflows/linux-app-release.yml b/.github/workflows/linux-app-release.yml index 47cb1f5f2472..049491f6fa30 100644 --- a/.github/workflows/linux-app-release.yml +++ b/.github/workflows/linux-app-release.yml @@ -46,7 +46,7 @@ jobs: fi - name: Checkout selected tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ inputs.tag }} fetch-depth: 0 @@ -81,7 +81,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout selected tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_release.outputs.tag_sha }} persist-credentials: false @@ -173,7 +173,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout selected tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_release.outputs.tag_sha }} persist-credentials: false @@ -241,7 +241,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout selected tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_release.outputs.tag_sha }} persist-credentials: false diff --git a/.github/workflows/linux-app.yml b/.github/workflows/linux-app.yml index d0a984547d44..1dae843aab3a 100644 --- a/.github/workflows/linux-app.yml +++ b/.github/workflows/linux-app.yml @@ -25,7 +25,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -53,7 +53,7 @@ jobs: run: rustup toolchain install stable --profile minimal --component rustfmt - name: Cache Cargo - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.cargo/registry @@ -112,7 +112,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -129,7 +129,7 @@ jobs: install-bun: "false" - name: Cache Cargo - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.cargo/registry diff --git a/.github/workflows/live-media-runner-image.yml b/.github/workflows/live-media-runner-image.yml index 307b7f87ca28..77bb48ac92d7 100644 --- a/.github/workflows/live-media-runner-image.yml +++ b/.github/workflows/live-media-runner-image.yml @@ -26,21 +26,21 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Login to GHCR - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ github.token }} - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: .github/images/live-media-runner/Dockerfile - name: Build and push live media runner image - uses: useblacksmith/build-push-action@fb9e3e6a9299c78462bfadd0d93352c316adc9b8 # v2 + uses: useblacksmith/build-push-action@9b0579bbec7a6cad2f171596c57e7ac1e7658850 # v2.3.0 with: context: .github/images/live-media-runner file: .github/images/live-media-runner/Dockerfile diff --git a/.github/workflows/macos-periphery.yml b/.github/workflows/macos-periphery.yml index 025cc9caf514..aaa090af9811 100644 --- a/.github/workflows/macos-periphery.yml +++ b/.github/workflows/macos-periphery.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout if: github.event_name == 'pull_request' && github.event.pull_request.draft == false - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 fetch-tags: false @@ -71,7 +71,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -81,7 +81,7 @@ jobs: - name: Verify Xcode run: | set -euo pipefail - for xcode_app in /Applications/Xcode_26.5.app /Applications/Xcode-26.5.0.app; do + for xcode_app in /Applications/Xcode_26.6.app /Applications/Xcode-26.6.0.app; do if [ -d "$xcode_app/Contents/Developer" ]; then sudo xcode-select -s "$xcode_app/Contents/Developer" break @@ -89,8 +89,8 @@ jobs: done xcodebuild -version xcode_version="$(xcodebuild -version | awk 'NR == 1 { print $2 }')" - if [[ "$xcode_version" != 26.* ]]; then - echo "error: expected Xcode 26.x, got $xcode_version" >&2 + if [[ "$xcode_version" != 26.6* ]]; then + echo "error: expected Xcode 26.6, got $xcode_version" >&2 exit 1 fi swift --version diff --git a/.github/workflows/macos-release.yml b/.github/workflows/macos-release.yml index 51e7ddf4f40e..7837bc1b8274 100644 --- a/.github/workflows/macos-release.yml +++ b/.github/workflows/macos-release.yml @@ -24,7 +24,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" jobs: validate_macos_release_request: @@ -43,7 +43,7 @@ jobs: fi - name: Checkout selected tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ inputs.tag }} fetch-depth: 0 diff --git a/.github/workflows/mantis-discord-smoke.yml b/.github/workflows/mantis-discord-smoke.yml index 25fca70079f4..5a6bd2977c68 100644 --- a/.github/workflows/mantis-discord-smoke.yml +++ b/.github/workflows/mantis-discord-smoke.yml @@ -68,7 +68,7 @@ jobs: trusted_reason: ${{ steps.validate.outputs.trusted_reason }} steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ inputs.ref }} @@ -131,7 +131,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} diff --git a/.github/workflows/mantis-discord-status-reactions.yml b/.github/workflows/mantis-discord-status-reactions.yml index 9ec74ec3f200..1d87f55d2b7c 100644 --- a/.github/workflows/mantis-discord-status-reactions.yml +++ b/.github/workflows/mantis-discord-status-reactions.yml @@ -98,7 +98,7 @@ jobs: candidate_revision: ${{ steps.validate.outputs['candidate-revision'] }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -121,7 +121,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -137,7 +137,7 @@ jobs: run: pnpm build - name: Setup Go for Crabbox CLI - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: "1.26.x" cache: false diff --git a/.github/workflows/mantis-discord-thread-attachment.yml b/.github/workflows/mantis-discord-thread-attachment.yml index ecd327673da2..9adf7e23096c 100644 --- a/.github/workflows/mantis-discord-thread-attachment.yml +++ b/.github/workflows/mantis-discord-thread-attachment.yml @@ -98,7 +98,7 @@ jobs: candidate_revision: ${{ steps.validate.outputs.candidate-revision }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -123,7 +123,7 @@ jobs: output_dir: ${{ steps.run_mantis.outputs.output_dir }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -139,7 +139,7 @@ jobs: run: pnpm build - name: Setup Go for Crabbox CLI - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: "1.26.x" cache: false diff --git a/.github/workflows/mantis-slack-desktop-smoke.yml b/.github/workflows/mantis-slack-desktop-smoke.yml index 662cde896cfd..c9f1132a0f16 100644 --- a/.github/workflows/mantis-slack-desktop-smoke.yml +++ b/.github/workflows/mantis-slack-desktop-smoke.yml @@ -111,7 +111,7 @@ jobs: candidate_revision: ${{ steps.validate.outputs.candidate-revision }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -132,7 +132,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -148,7 +148,7 @@ jobs: run: pnpm build - name: Cache Mantis candidate pnpm store - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.local/share/pnpm/store @@ -158,7 +158,7 @@ jobs: mantis-slack-pnpm-${{ runner.os }}-${{ env.NODE_VERSION }}- - name: Setup Go for Crabbox CLI - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: "1.26.x" cache: false diff --git a/.github/workflows/mantis-telegram-desktop-proof.yml b/.github/workflows/mantis-telegram-desktop-proof.yml index 0c308cb743b3..ad55b727d0bc 100644 --- a/.github/workflows/mantis-telegram-desktop-proof.yml +++ b/.github/workflows/mantis-telegram-desktop-proof.yml @@ -175,7 +175,7 @@ jobs: output_dir: ${{ steps.collect.outputs.output_dir }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} persist-credentials: false @@ -215,7 +215,7 @@ jobs: - name: Restore exact baseline build id: baseline_cache - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .artifacts/mantis-runtime-build.tar key: ${{ runner.os }}-${{ runner.arch }}-mantis-runtime-v2-${{ steps.worktrees.outputs.lockfile_sha256 }}-${{ steps.worktrees.outputs.node_version }}-${{ steps.worktrees.outputs.pnpm_version }}-${{ needs.resolve_request.outputs.baseline_revision }} @@ -235,7 +235,7 @@ jobs: - name: Save exact baseline build if: steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.baseline_cache.outputs.cache-hit != 'true' continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .artifacts/mantis-runtime-build.tar key: ${{ steps.baseline_cache.outputs.cache-primary-key }} diff --git a/.github/workflows/mantis-telegram-live.yml b/.github/workflows/mantis-telegram-live.yml index 72bb9e0d2f87..b40e1fcb4f4b 100644 --- a/.github/workflows/mantis-telegram-live.yml +++ b/.github/workflows/mantis-telegram-live.yml @@ -151,7 +151,7 @@ jobs: candidate_revision: ${{ steps.validate.outputs.candidate-revision }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -221,7 +221,7 @@ jobs: done - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -237,7 +237,7 @@ jobs: run: pnpm build - name: Cache Mantis candidate pnpm store - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.local/share/pnpm/store @@ -247,7 +247,7 @@ jobs: mantis-telegram-pnpm-${{ runner.os }}-${{ env.NODE_VERSION }}- - name: Setup Go for Crabbox CLI - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: "1.26.x" cache: false diff --git a/.github/workflows/mantis-web-ui-chat-proof.yml b/.github/workflows/mantis-web-ui-chat-proof.yml index d84cea87498b..ad6de5c9b806 100644 --- a/.github/workflows/mantis-web-ui-chat-proof.yml +++ b/.github/workflows/mantis-web-ui-chat-proof.yml @@ -91,7 +91,7 @@ jobs: candidate_revision: ${{ steps.validate.outputs.candidate-revision }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -118,7 +118,7 @@ jobs: proof_status: ${{ steps.run_mantis.outputs.proof_status }} steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 0 @@ -213,7 +213,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout harness ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/maturity-scorecard.yml b/.github/workflows/maturity-scorecard.yml index 532ee2136b37..c7a2f0cafd31 100644 --- a/.github/workflows/maturity-scorecard.yml +++ b/.github/workflows/maturity-scorecard.yml @@ -203,7 +203,7 @@ jobs: fi - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ inputs.ref }} @@ -335,7 +335,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout trusted workflow source - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -395,7 +395,7 @@ jobs: contents: read steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} fetch-depth: 0 @@ -698,7 +698,7 @@ jobs: contents: read steps: - name: Checkout trusted workflow source - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -706,7 +706,7 @@ jobs: submodules: false - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} path: selected diff --git a/.github/workflows/native-app-locale-refresh.yml b/.github/workflows/native-app-locale-refresh.yml index 7e39ac1f2ad5..a3d7d245f4a7 100644 --- a/.github/workflows/native-app-locale-refresh.yml +++ b/.github/workflows/native-app-locale-refresh.yml @@ -68,7 +68,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve-base.outputs.sha }} persist-credentials: false @@ -140,7 +140,7 @@ jobs: name: Refresh native ${{ matrix.locale }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve-base.outputs.sha }} persist-credentials: false @@ -258,7 +258,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve-base.outputs.sha }} fetch-depth: 0 diff --git a/.github/workflows/node22-compat.yml b/.github/workflows/node22-compat.yml index 438920a4fc78..40790354364e 100644 --- a/.github/workflows/node22-compat.yml +++ b/.github/workflows/node22-compat.yml @@ -16,19 +16,19 @@ jobs: timeout-minutes: 60 steps: - name: Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Setup Node environment uses: ./.github/actions/setup-node-env with: cache-mode: restore - node-version: "22.22.3" + node-version: "22.23.2" install-bun: "false" - name: Resolve trusted declaration cache artifact id: declaration_cache env: - ARTIFACT_NAME: build-all-cache-v1-Linux-X64-node-22.22.3 + ARTIFACT_NAME: build-all-cache-v1-Linux-X64-node-22.23.2 GH_TOKEN: ${{ github.token }} shell: bash run: | @@ -116,7 +116,7 @@ jobs: compression-level: 1 if-no-files-found: error include-hidden-files: true - name: build-all-cache-v1-${{ runner.os }}-${{ runner.arch }}-node-22.22.3 + name: build-all-cache-v1-${{ runner.os }}-${{ runner.arch }}-node-22.23.2 overwrite: true path: .artifacts/build-all-cache retention-days: 14 diff --git a/.github/workflows/npm-placeholder-bootstrap.yml b/.github/workflows/npm-placeholder-bootstrap.yml index ff442079e93a..6df070f854c9 100644 --- a/.github/workflows/npm-placeholder-bootstrap.yml +++ b/.github/workflows/npm-placeholder-bootstrap.yml @@ -24,7 +24,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.15.0" + NODE_VERSION: "24.19.0" jobs: plan: @@ -41,7 +41,7 @@ jobs: target_sha: ${{ steps.target.outputs.sha }} steps: - name: Checkout selected source - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ inputs.ref }} @@ -78,7 +78,7 @@ jobs: echo "sha=$SOURCE_REF" >> "$GITHUB_OUTPUT" - name: Setup Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -151,14 +151,14 @@ jobs: contents: read steps: - name: Checkout trusted verification tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} fetch-depth: 1 - name: Checkout bound target manifests - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.plan.outputs.target_sha }} @@ -166,7 +166,7 @@ jobs: fetch-depth: 1 - name: Setup trusted Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -236,14 +236,14 @@ jobs: id-token: write steps: - name: Checkout trusted publication tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} fetch-depth: 1 - name: Checkout bound target manifests - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.plan.outputs.target_sha }} @@ -251,7 +251,7 @@ jobs: fetch-depth: 1 - name: Setup trusted Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} diff --git a/.github/workflows/npm-telegram-beta-e2e.yml b/.github/workflows/npm-telegram-beta-e2e.yml index eb3432e388c2..b9ac2bf265e3 100644 --- a/.github/workflows/npm-telegram-beta-e2e.yml +++ b/.github/workflows/npm-telegram-beta-e2e.yml @@ -185,7 +185,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" jobs: run_package_telegram_e2e: @@ -202,19 +202,19 @@ jobs: DOCKER_BUILD_RECORD_UPLOAD: "false" steps: - name: Checkout dispatch ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.harness_ref || github.sha }} fetch-depth: 1 persist-credentials: false - name: Set up Blacksmith Docker Builder - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: scripts/e2e/Dockerfile - name: Build Docker E2E image - uses: useblacksmith/build-push-action@fb9e3e6a9299c78462bfadd0d93352c316adc9b8 # v2 + uses: useblacksmith/build-push-action@9b0579bbec7a6cad2f171596c57e7ac1e7658850 # v2.3.0 with: context: . file: ./scripts/e2e/Dockerfile diff --git a/.github/workflows/openclaw-cross-os-release-checks-reusable.yml b/.github/workflows/openclaw-cross-os-release-checks-reusable.yml index 140e9f3e97b3..38b0eaf04115 100644 --- a/.github/workflows/openclaw-cross-os-release-checks-reusable.yml +++ b/.github/workflows/openclaw-cross-os-release-checks-reusable.yml @@ -242,7 +242,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" OPENCLAW_REPOSITORY: openclaw/openclaw OPENCLAW_CROSS_OS_OPENAI_MODEL: ${{ inputs.openai_model || vars.OPENCLAW_CROSS_OS_OPENAI_MODEL || 'openai/gpt-5.6-luna' }} @@ -394,7 +394,7 @@ jobs: esac - name: Checkout workflow repo - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ env.OPENCLAW_REPOSITORY }} ref: ${{ steps.workflow_ref.outputs.value }} @@ -446,7 +446,7 @@ jobs: - name: Checkout public source ref if: inputs.candidate_artifact_name == '' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ env.OPENCLAW_REPOSITORY }} ref: ${{ inputs.ref }} @@ -457,7 +457,7 @@ jobs: submodules: recursive - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -888,7 +888,7 @@ jobs: timeout-minutes: 60 steps: - name: Checkout workflow repo - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ env.OPENCLAW_REPOSITORY }} ref: ${{ needs.prepare.outputs.workflow_ref }} @@ -897,7 +897,7 @@ jobs: persist-credentials: false - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} diff --git a/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml b/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml index e7f0ea8eb739..0202cd463b93 100644 --- a/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml +++ b/.github/workflows/openclaw-live-and-e2e-checks-reusable.yml @@ -534,7 +534,7 @@ permissions: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" OPENCLAW_DOCKER_E2E_ALLOW_UNRELEASED_CHANGELOG: ${{ inputs.allow_unreleased_changelog }} OPENCLAW_ALLOW_FROZEN_TARGET_SCENARIO_OMISSIONS: ${{ inputs.allow_frozen_target_scenario_omissions && '1' || '0' }} OPENCLAW_UPGRADE_SURVIVOR_TARGET_ROOT: ${{ github.workspace }} @@ -583,7 +583,7 @@ jobs: NODE - name: Checkout workflow repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 @@ -910,7 +910,7 @@ jobs: live_models_omitted_json: ${{ steps.plan.outputs.live_models_omitted_json }} steps: - name: Checkout trusted release harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} @@ -941,7 +941,7 @@ jobs: OPENCLAW_LIVE_TEST: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 @@ -991,7 +991,7 @@ jobs: OPENCLAW_VITEST_MAX_WORKERS: "2" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 @@ -1039,7 +1039,7 @@ jobs: OPENCLAW_VITEST_MAX_WORKERS: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 @@ -1081,12 +1081,12 @@ jobs: shell: bash run: | set -euo pipefail - export OPENSHELL_VERSION=v0.0.92 + export OPENSHELL_VERSION=v0.0.106 installer_path="$(mktemp "${RUNNER_TEMP}/openshell-install.XXXXXX")" trap 'rm -f "$installer_path"' EXIT curl -LsSf --connect-timeout 10 --max-time 120 \ -o "$installer_path" \ - https://raw.githubusercontent.com/NVIDIA/OpenShell/2d108818f84be568e63232d5d0aba53775cea4f7/install.sh + https://raw.githubusercontent.com/NVIDIA/OpenShell/c4b500a7de64d0b66e3ee8098f58d14299092162/install.sh sh "$installer_path" openshell --version @@ -1255,7 +1255,7 @@ jobs: steps: - name: Checkout selected ref if: contains(matrix.profiles, inputs.release_test_profile) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} @@ -1263,7 +1263,7 @@ jobs: - name: Checkout trusted release harness if: contains(matrix.profiles, inputs.release_test_profile) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} @@ -1537,7 +1537,7 @@ jobs: groups_json: ${{ steps.groups.outputs.groups_json }} steps: - name: Checkout trusted release harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} @@ -1640,14 +1640,14 @@ jobs: DOCKER_E2E_LANES: ${{ matrix.group.docker_lanes }} steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 - name: Checkout trusted release harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} @@ -1933,14 +1933,14 @@ jobs: OPENCLAW_SKIP_DOCKER_BUILD: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 - name: Checkout trusted release harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -2160,14 +2160,14 @@ jobs: OPENCLAW_DOCKER_E2E_REPO_ROOT: ${{ github.workspace }} steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 persist-credentials: false - name: Checkout trusted release harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -2838,7 +2838,7 @@ jobs: DOCKER_BUILD_RECORD_UPLOAD: "false" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 @@ -2892,13 +2892,13 @@ jobs: - name: Setup Docker builder if: inputs.shared_image_policy == 'no-push-artifact' - uses: useblacksmith/setup-docker-builder@6ff44f8e5255f9d8aa31ef22f7e57a2d926b7da0 # v1 + uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2.1.0 with: - max-cache-size-mb: 800000 + cache-key: Dockerfile - name: Build shared live-test image if: inputs.shared_image_policy == 'no-push-artifact' - uses: useblacksmith/build-push-action@fb9e3e6a9299c78462bfadd0d93352c316adc9b8 # v2 + uses: useblacksmith/build-push-action@9b0579bbec7a6cad2f171596c57e7ac1e7658850 # v2.3.0 with: context: . file: ./Dockerfile @@ -2917,7 +2917,7 @@ jobs: # target must not accidentally package the current checkout into its image. - name: Checkout trusted release harness if: inputs.shared_image_policy == 'no-push-artifact' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -3039,7 +3039,7 @@ jobs: steps: - name: Checkout selected ref if: contains(matrix.profiles, inputs.release_test_profile) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 @@ -3047,7 +3047,7 @@ jobs: - name: Checkout trusted live Docker harness if: contains(matrix.profiles, inputs.release_test_profile) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -3209,14 +3209,14 @@ jobs: OPENCLAW_VITEST_MAX_WORKERS: "2" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 persist-credentials: false - name: Checkout trusted live Docker harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -3641,14 +3641,14 @@ jobs: steps: - name: Checkout selected ref if: contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || (inputs.live_suite_filter == 'native-live-src-gateway-profiles-anthropic' && startsWith(matrix.suite_id, 'native-live-src-gateway-profiles-anthropic-')) || (inputs.live_suite_filter == 'native-live-src-gateway-profiles-opencode-go' && startsWith(matrix.suite_id, 'native-live-src-gateway-profiles-opencode-go-'))) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 - name: Checkout trusted live shard harness if: contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || (inputs.live_suite_filter == 'native-live-src-gateway-profiles-anthropic' && startsWith(matrix.suite_id, 'native-live-src-gateway-profiles-anthropic-')) || (inputs.live_suite_filter == 'native-live-src-gateway-profiles-opencode-go' && startsWith(matrix.suite_id, 'native-live-src-gateway-profiles-opencode-go-'))) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} @@ -3912,7 +3912,7 @@ jobs: steps: - name: Checkout selected ref if: contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 @@ -3920,7 +3920,7 @@ jobs: - name: Checkout trusted live shard harness if: contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} ref: ${{ needs.validate_selected_ref.outputs.workflow_sha }} @@ -4190,14 +4190,14 @@ jobs: steps: - name: Checkout selected ref if: contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || (inputs.live_suite_filter == 'native-live-extensions-media-video' && startsWith(matrix.suite_id, 'native-live-extensions-media-video-'))) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.validate_selected_ref.outputs.selected_sha }} fetch-depth: 1 - name: Checkout trusted live shard harness if: contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || (inputs.live_suite_filter == 'native-live-extensions-media-video' && startsWith(matrix.suite_id, 'native-live-extensions-media-video-'))) - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false repository: ${{ needs.validate_selected_ref.outputs.workflow_repository }} diff --git a/.github/workflows/openclaw-npm-release.yml b/.github/workflows/openclaw-npm-release.yml index 11a1d365200f..7284766ad8fe 100644 --- a/.github/workflows/openclaw-npm-release.yml +++ b/.github/workflows/openclaw-npm-release.yml @@ -89,7 +89,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" jobs: # PLEASE DON'T ADD LONG-RUNNING OR FLAKY CHECKS TO THE npm RELEASE PATH. @@ -136,7 +136,7 @@ jobs: exit 1 - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.tag }} fetch-depth: 0 @@ -256,7 +256,7 @@ jobs: - name: Restore preflight build outputs id: dist_build_cache - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | dist/ @@ -322,7 +322,7 @@ jobs: - name: Save preflight build outputs if: steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.dist_build_cache.outputs.cache-hit != 'true' continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | dist/ @@ -381,7 +381,7 @@ jobs: # IF A CHECK CAN TAKE A LONG TIME, NEEDS LIVE CREDENTIALS, OR IS KNOWN TO BE FLAKY, # IT BELONGS IN openclaw-release-checks.yml INSTEAD OF BLOCKING npm PUBLISH. - name: Checkout trusted Plugin SDK API tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .artifacts/plugin-sdk-release-tooling @@ -831,7 +831,7 @@ jobs: contents: read steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.release_candidate_branch != '' && format('refs/tags/{0}', inputs.tag) || github.sha }} fetch-depth: 0 @@ -1035,7 +1035,7 @@ jobs: fi - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ inputs.tag }} # Frozen preflight evidence already binds the exact release SHA and @@ -1084,7 +1084,7 @@ jobs: echo "Publishing openclaw@${PACKAGE_VERSION}" - name: Checkout trusted validation verifier - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: trusted-workflow diff --git a/.github/workflows/openclaw-performance.yml b/.github/workflows/openclaw-performance.yml index 81aa0897a810..f79a4729340b 100644 --- a/.github/workflows/openclaw-performance.yml +++ b/.github/workflows/openclaw-performance.yml @@ -75,8 +75,8 @@ env: OCM_VERSION: v0.2.32 OCM_LINUX_X64_SHA256: 5b20c21b2825f69b89eb37baa657f0f0062124517e6e6828e9857c7e9bbd3070 KOVA_REPOSITORY: openclaw/Kova - KOVA_CANONICAL_CONFIG_REF: 0f9e678e239b45db46d2bd930b7983203580df78 - KOVA_LEGACY_LIST_CONFIG_REF: 0f9e678e239b45db46d2bd930b7983203580df78 + KOVA_CANONICAL_CONFIG_REF: dfafaff9dcd49b9c76788c6260f1f72dd2ced593 + KOVA_LEGACY_LIST_CONFIG_REF: dfafaff9dcd49b9c76788c6260f1f72dd2ced593 PERFORMANCE_MODEL_ID: gpt-5.6-luna # Release matrices cold-build the candidate runtime before measurement. KOVA_SCENARIO_TIMEOUT_MS: ${{ inputs.profile == 'release' && '900000' || '300000' }} @@ -97,7 +97,7 @@ jobs: cache_write_allowed: ${{ steps.candidate_trust.outputs.cache_write_allowed }} steps: - name: Checkout target metadata - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.target_ref || github.sha }} path: .artifacts/performance-target @@ -296,7 +296,7 @@ jobs: - name: Checkout OpenClaw if: steps.lane.outputs.run == 'true' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_target.outputs.checkout_ref }} fetch-depth: 1 @@ -304,7 +304,7 @@ jobs: - name: Checkout performance workflow helpers if: steps.lane.outputs.run == 'true' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .artifacts/performance-workflow @@ -696,14 +696,14 @@ jobs: REQUESTED_REPEAT: ${{ inputs.repeat || '3' }} steps: - name: Checkout OpenClaw source target - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_target.outputs.checkout_ref }} fetch-depth: 1 persist-credentials: false - name: Checkout source performance helpers - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .artifacts/performance-workflow @@ -1027,7 +1027,7 @@ jobs: - name: Checkout performance publisher helper if: steps.lane.outputs.run == 'true' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .artifacts/performance-publisher diff --git a/.github/workflows/openclaw-release-checks.yml b/.github/workflows/openclaw-release-checks.yml index 1e8202859c81..da2a42321f93 100644 --- a/.github/workflows/openclaw-release-checks.yml +++ b/.github/workflows/openclaw-release-checks.yml @@ -132,7 +132,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" OPENCLAW_CI_OPENAI_MODEL: ${{ vars.OPENCLAW_CI_OPENAI_MODEL || 'openai/gpt-5.6-luna' }} jobs: @@ -285,7 +285,7 @@ jobs: echo "eligible=true" >> "$GITHUB_OUTPUT" - name: Checkout trusted workflow helper - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -306,7 +306,7 @@ jobs: - name: Checkout selected ref for reachability fallback if: steps.fast_ref.outputs.fallback == 'true' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ inputs.ref }} @@ -809,7 +809,7 @@ jobs: source_sha: ${{ steps.package.outputs.source_sha || fromJSON(needs.resolve_target.outputs.candidate_artifact_json || '{}').packageSourceSha }} steps: - name: Checkout trusted workflow ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -1412,7 +1412,7 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} @@ -1420,7 +1420,7 @@ jobs: - name: Checkout trusted QA Anthropic mock tooling if: needs.resolve_target.outputs.trusted_qa_tooling_eligible == 'true' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} path: .release-qa-tooling-trusted @@ -1566,14 +1566,14 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} fetch-depth: 1 - name: Checkout trusted release artifact resolver - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -1704,7 +1704,7 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} @@ -1758,7 +1758,7 @@ jobs: - name: Checkout trusted validator after candidate suite if: always() - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -1828,7 +1828,7 @@ jobs: - name: Checkout trusted validator after candidate report if: always() - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -1906,7 +1906,7 @@ jobs: contents: read steps: - name: Checkout trusted release artifact resolver - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -2025,14 +2025,14 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} fetch-depth: 1 - name: Checkout trusted release artifact resolver - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -2290,7 +2290,7 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} @@ -2409,7 +2409,7 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} @@ -2506,7 +2506,7 @@ jobs: OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.resolve_target.outputs.revision }} @@ -2616,7 +2616,7 @@ jobs: timeout-minutes: 5 steps: - name: Checkout trusted release artifact resolver - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} diff --git a/.github/workflows/openclaw-release-publish.yml b/.github/workflows/openclaw-release-publish.yml index 8626c962af5c..a952633d59d0 100644 --- a/.github/workflows/openclaw-release-publish.yml +++ b/.github/workflows/openclaw-release-publish.yml @@ -115,7 +115,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" jobs: resolve_release_target: @@ -539,7 +539,7 @@ jobs: --jq .content | base64 --decode > "${tooling_dir}/lib/record-shared.mjs" - name: Checkout release tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ inputs.tag }} fetch-depth: 0 @@ -850,14 +850,14 @@ jobs: environment: npm-release steps: - name: Checkout release SHA - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve_release_target.outputs.sha }} fetch-depth: ${{ inputs.release_evidence_mode == 'authorized-beta-focused-v1' && 0 || 1 }} persist-credentials: false - name: Checkout trusted release tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} path: .release-harness @@ -1034,7 +1034,7 @@ jobs: - name: Attest ClawHub bootstrap approval if: ${{ steps.clawhub_plan.outputs.bootstrap_should_dispatch == 'true' }} - uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0 + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 with: subject-path: ${{ runner.temp }}/clawhub-bootstrap-approval/approval.json @@ -1097,7 +1097,7 @@ jobs: - name: Attest Android release approval if: ${{ inputs.publish_openclaw_npm && !contains(inputs.tag, '-alpha.') && !contains(inputs.tag, '-beta.') }} - uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0 + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 with: subject-path: ${{ runner.temp }}/android-release-approval/approval.json diff --git a/.github/workflows/openclaw-release-telegram-qa.yml b/.github/workflows/openclaw-release-telegram-qa.yml index 49c0fba311d6..86d9d7a594e3 100644 --- a/.github/workflows/openclaw-release-telegram-qa.yml +++ b/.github/workflows/openclaw-release-telegram-qa.yml @@ -56,7 +56,7 @@ on: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" GH_TRANSIENT_SERVER_OR_NETWORK_PATTERN: "HTTP 5[0-9][0-9]|Server Error|invalid character .* looking for beginning of value|error connecting to|context deadline exceeded|connection reset by peer|connection refused|TLS handshake timeout|i/o timeout|network is unreachable|ETIMEDOUT|ECONNRESET|EAI_AGAIN" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" OPENCLAW_BUILD_PRIVATE_QA: "1" OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1" @@ -265,7 +265,7 @@ jobs: [[ "$IDENTITY_STATUS" == "success" ]] - name: Checkout trusted Telegram QA bootstrap - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.trusted_identity.outputs.workflow_repository }} ref: ${{ needs.trusted_identity.outputs.workflow_sha }} @@ -289,7 +289,7 @@ jobs: install-deps: "false" - name: Checkout candidate runtime - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.target_sha }} fetch-depth: 1 @@ -386,7 +386,7 @@ jobs: } >>"$GITHUB_OUTPUT" - name: Restore trusted Telegram QA bootstrap - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.trusted_identity.outputs.workflow_repository }} ref: ${{ needs.trusted_identity.outputs.workflow_sha }} @@ -539,7 +539,7 @@ jobs: [[ "$IDENTITY_STATUS" == "success" && "$BUILD_STATUS" == "success" ]] - name: Checkout trusted Telegram QA verifier - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.trusted_identity.outputs.workflow_repository }} ref: ${{ needs.trusted_identity.outputs.workflow_sha }} @@ -639,7 +639,7 @@ jobs: echo "archive_path=$archive_path" >>"$GITHUB_OUTPUT" - name: Checkout independent candidate source - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.target_sha }} fetch-depth: 1 @@ -708,7 +708,7 @@ jobs: - name: Attest exact candidate archive bytes id: attest - uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0 + uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 with: subject-path: ${{ steps.verify_candidate.outputs.archive_path }} @@ -764,7 +764,7 @@ jobs: "$ATTESTATION_STATUS" == "success" ]] - name: Checkout trusted Telegram QA harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.trusted_identity.outputs.workflow_repository }} ref: ${{ needs.trusted_identity.outputs.workflow_sha }} @@ -2571,7 +2571,7 @@ jobs: # Identity binds this checkout to the workflow definition that received # the OIDC token. Do not execute status code from the release candidate. - name: Checkout trusted Telegram status helper - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: ${{ needs.trusted_identity.outputs.workflow_repository }} ref: ${{ needs.trusted_identity.outputs.workflow_sha }} diff --git a/.github/workflows/openclaw-stable-main-closeout.yml b/.github/workflows/openclaw-stable-main-closeout.yml index fea29f3aa729..452883301c9c 100644 --- a/.github/workflows/openclaw-stable-main-closeout.yml +++ b/.github/workflows/openclaw-stable-main-closeout.yml @@ -75,7 +75,7 @@ jobs: - name: Checkout pushed main if: ${{ github.event_name == 'push' }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} fetch-depth: 1 @@ -336,14 +336,14 @@ jobs: timeout-minutes: 20 steps: - name: Checkout resolved main state - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.resolve.outputs.main_ref }} fetch-depth: 1 persist-credentials: false - name: Checkout shipped release tag - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ needs.resolve.outputs.tag }} path: release-tag @@ -352,7 +352,7 @@ jobs: - name: Checkout fallback evidence tag if: ${{ needs.resolve.outputs.fallback_correction == 'true' }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ needs.resolve.outputs.evidence_tag }} path: evidence-tag diff --git a/.github/workflows/opengrep-precise-full.yml b/.github/workflows/opengrep-precise-full.yml index 16d2467b8cd9..dd33d90075c8 100644 --- a/.github/workflows/opengrep-precise-full.yml +++ b/.github/workflows/opengrep-precise-full.yml @@ -25,7 +25,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -34,8 +34,8 @@ jobs: # Pin the official Linux asset and its published digest. The upstream # installer validates tags through an unauthenticated GitHub API and # can fail before scanning even when this fixed release is available. - OPENGREP_VERSION: v1.25.0 - OPENGREP_LINUX_X64_SHA256: 9ac4aebb47ba3f7b0d8fc641ac8749cb6c2f253f616131a67d9631e00d4bea33 + OPENGREP_VERSION: v1.27.1 + OPENGREP_LINUX_X64_SHA256: 58053da76672bbeb5b0a5441021c58338707052e10f81d777140ca879bd491ce run: | set -euo pipefail binary="$(mktemp "${RUNNER_TEMP}/opengrep.XXXXXX")" @@ -61,7 +61,7 @@ jobs: scripts/run-opengrep.sh --sarif --error - name: Upload SARIF to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@7188fc363630916deb702c7fdcf4e481b751f97a + uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 # Only upload if the scan actually produced a SARIF file. if: always() && hashFiles('.opengrep-out/precise.sarif') != '' with: diff --git a/.github/workflows/opengrep-precise.yml b/.github/workflows/opengrep-precise.yml index 5b6269b2f403..cbd9df02747d 100644 --- a/.github/workflows/opengrep-precise.yml +++ b/.github/workflows/opengrep-precise.yml @@ -41,7 +41,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} fetch-depth: 2 @@ -60,8 +60,8 @@ jobs: # Pin the official Linux asset and its published digest. The upstream # installer validates tags through an unauthenticated GitHub API and # can fail before scanning even when this fixed release is available. - OPENGREP_VERSION: v1.25.0 - OPENGREP_LINUX_X64_SHA256: 9ac4aebb47ba3f7b0d8fc641ac8749cb6c2f253f616131a67d9631e00d4bea33 + OPENGREP_VERSION: v1.27.1 + OPENGREP_LINUX_X64_SHA256: 58053da76672bbeb5b0a5441021c58338707052e10f81d777140ca879bd491ce run: | set -euo pipefail binary="$(mktemp "${RUNNER_TEMP}/opengrep.XXXXXX")" @@ -92,7 +92,7 @@ jobs: scripts/run-opengrep.sh --changed --sarif --error - name: Upload SARIF to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@7188fc363630916deb702c7fdcf4e481b751f97a + uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7 # Only upload if the scan actually produced a SARIF file. if: always() && hashFiles('.opengrep-out/precise.sarif') != '' with: diff --git a/.github/workflows/package-acceptance.yml b/.github/workflows/package-acceptance.yml index 976673f32d71..09dae4e217e0 100644 --- a/.github/workflows/package-acceptance.yml +++ b/.github/workflows/package-acceptance.yml @@ -426,7 +426,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" PACKAGE_ARTIFACT_NAME: package-under-test-${{ github.run_id }}-${{ github.run_attempt }} jobs: @@ -456,7 +456,7 @@ jobs: telegram_scenarios: ${{ steps.profile.outputs.telegram_scenarios }} steps: - name: Checkout package workflow ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.workflow_ref }} fetch-depth: 0 @@ -636,20 +636,21 @@ jobs: echo "telegram_mode must not be none when suite_profile=telegram." >&2 exit 1 fi - telegram_scenarios=() - IFS=',' read -ra raw_telegram_scenarios <<< "$TELEGRAM_SCENARIOS" - for raw_scenario in "${raw_telegram_scenarios[@]}"; do + telegram_scenario="" + telegram_scenario_count=0 + while IFS= read -r raw_scenario || [[ -n "$raw_scenario" ]]; do scenario="${raw_scenario#"${raw_scenario%%[![:space:]]*}"}" scenario="${scenario%"${scenario##*[![:space:]]}"}" if [[ -n "$scenario" ]]; then - telegram_scenarios+=("$scenario") + telegram_scenario="$scenario" + ((telegram_scenario_count += 1)) fi - done - if [[ "${#telegram_scenarios[@]}" -ne 1 ]]; then + done < <(printf '%s' "$TELEGRAM_SCENARIOS" | tr ',' '\n') + if [[ "$telegram_scenario_count" -ne 1 ]]; then echo "telegram_scenarios must contain exactly one scenario when suite_profile=telegram." >&2 exit 1 fi - TELEGRAM_SCENARIOS="${telegram_scenarios[0]}" + TELEGRAM_SCENARIOS="$telegram_scenario" ;; product) docker_lanes="npm-onboard-channel-agent doctor-switch update-channel-switch skill-install update-corrupt-plugin upgrade-survivor published-upgrade-survivor root-managed-vps-upgrade update-restart-auth plugins plugin-update mcp-channels cron-mcp-cleanup openai-web-search-minimal openwebui" @@ -800,7 +801,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout package workflow ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.workflow_ref }} fetch-depth: 1 @@ -848,14 +849,14 @@ jobs: contents: read steps: - name: Checkout package workflow ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.workflow_ref }} fetch-depth: 1 persist-credentials: false - name: Setup Node 24 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24 diff --git a/.github/workflows/plugin-clawhub-new.yml b/.github/workflows/plugin-clawhub-new.yml index 800b57c1b010..a2bd27a11d88 100644 --- a/.github/workflows/plugin-clawhub-new.yml +++ b/.github/workflows/plugin-clawhub-new.yml @@ -53,7 +53,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.15.0" + NODE_VERSION: "24.19.0" CLAWHUB_REGISTRY: "https://clawhub.ai" jobs: @@ -69,7 +69,7 @@ jobs: matrix: ${{ steps.plan.outputs.matrix }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -338,7 +338,7 @@ jobs: github-token: ${{ github.token }} - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -401,13 +401,13 @@ jobs: contents: read steps: - name: Checkout trusted workflow tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} - name: Setup trusted Node runtime - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -430,12 +430,12 @@ jobs: )" printf '%s\n' "${help_output}" if ! grep -Fq "Usage: clawhub package trusted-publisher set" <<<"${help_output}"; then - echo "::error::CLAW-277 03 - Split OpenClaw plugin ClawHub publishing into OIDC release and token bootstrap workflows requires locked clawhub@0.23.1 to expose 'package trusted-publisher set' before token bootstrap publish can run. The pinned CLI returned parent help or no set command, so this workflow is stopping before creating a ClawHub package row." + echo "::error::CLAW-277 03 - Split OpenClaw plugin ClawHub publishing into OIDC release and token bootstrap workflows requires locked clawhub@0.23.3 to expose 'package trusted-publisher set' before token bootstrap publish can run. The pinned CLI returned parent help or no set command, so this workflow is stopping before creating a ClawHub package row." exit 1 fi for required_flag in --repository --workflow-filename; do if ! grep -Fq -- "${required_flag}" <<<"${help_output}"; then - echo "::error::CLAW-277 03 - Split OpenClaw plugin ClawHub publishing into OIDC release and token bootstrap workflows requires locked clawhub@0.23.1 trusted-publisher set help to include ${required_flag}." + echo "::error::CLAW-277 03 - Split OpenClaw plugin ClawHub publishing into OIDC release and token bootstrap workflows requires locked clawhub@0.23.3 trusted-publisher set help to include ${required_flag}." exit 1 fi done @@ -459,7 +459,7 @@ jobs: clawhub_toolchain_sha256: ${{ steps.clawhub_cli.outputs.lock_sha256 }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -489,7 +489,7 @@ jobs: git checkout --detach "${TARGET_SHA}" - name: Checkout trusted workflow tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} @@ -640,14 +640,14 @@ jobs: contents: read steps: - name: Checkout trusted workflow tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} path: .release-harness - name: Setup trusted Node runtime - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -796,14 +796,14 @@ jobs: contents: read steps: - name: Checkout trusted workflow tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} path: .release-harness - name: Setup trusted Node runtime - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} diff --git a/.github/workflows/plugin-clawhub-release.yml b/.github/workflows/plugin-clawhub-release.yml index 86ed277417fd..e2a40a4c20f2 100644 --- a/.github/workflows/plugin-clawhub-release.yml +++ b/.github/workflows/plugin-clawhub-release.yml @@ -40,9 +40,9 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" CLAWHUB_REGISTRY: "https://clawhub.ai" - CLAWHUB_CLI_PACKAGE: "clawhub@0.23.1" + CLAWHUB_CLI_PACKAGE: "clawhub@0.23.3" jobs: preview_plugins_clawhub: @@ -63,7 +63,7 @@ jobs: missing_trusted_publisher_matrix: ${{ steps.plan.outputs.missing_trusted_publisher_matrix }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.ref }} @@ -277,7 +277,7 @@ jobs: contents: read steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -327,7 +327,7 @@ jobs: fi - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.preview_plugins_clawhub.outputs.ref_revision }} @@ -390,7 +390,7 @@ jobs: needs: [preview_plugins_clawhub, pack_plugins_clawhub_artifacts, approve_plugins_clawhub_release] if: always() && github.event_name == 'workflow_dispatch' && needs.preview_plugins_clawhub.outputs.has_candidates == 'true' && needs.pack_plugins_clawhub_artifacts.result == 'success' && (inputs.dry_run == true || needs.approve_plugins_clawhub_release.result == 'success') - uses: openclaw/clawhub/.github/workflows/package-publish.yml@d8096dfc039e86ab942ddf9ef117d04849fd84c1 + uses: openclaw/clawhub/.github/workflows/package-publish.yml@87ca030c30f3cfb78ab15c8e66b5ff1469c8f9c8 # v0.23.3 permissions: actions: read contents: read @@ -429,7 +429,7 @@ jobs: plugin: ${{ fromJson(needs.preview_plugins_clawhub.outputs.matrix) }} steps: - name: Checkout verification tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.sha }} diff --git a/.github/workflows/plugin-init-scaffold-validation.yml b/.github/workflows/plugin-init-scaffold-validation.yml index 8bac22018b6f..c8029701ace5 100644 --- a/.github/workflows/plugin-init-scaffold-validation.yml +++ b/.github/workflows/plugin-init-scaffold-validation.yml @@ -40,7 +40,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Setup Node environment uses: ./.github/actions/setup-node-env diff --git a/.github/workflows/plugin-npm-release.yml b/.github/workflows/plugin-npm-release.yml index 51168c8646a0..f926376b789a 100644 --- a/.github/workflows/plugin-npm-release.yml +++ b/.github/workflows/plugin-npm-release.yml @@ -83,7 +83,7 @@ concurrency: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.16.0" + NODE_VERSION: "24.19.0" jobs: preview_plugins_npm: @@ -100,7 +100,7 @@ jobs: all_matrix: ${{ steps.plan.outputs.all_matrix }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.event_name == 'workflow_dispatch' && inputs.ref || github.sha }} @@ -109,7 +109,7 @@ jobs: - name: Checkout trusted preflight tooling if: github.event_name == 'workflow_dispatch' && inputs.preflight_only - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} @@ -336,7 +336,7 @@ jobs: contents: read steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -378,14 +378,14 @@ jobs: plugin: ${{ fromJson(github.event_name == 'workflow_dispatch' && inputs.preflight_only && !inputs.trusted_publisher_preflight && needs.preview_plugins_npm.outputs.all_matrix || needs.preview_plugins_npm.outputs.matrix) }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.preview_plugins_npm.outputs.ref_revision }} fetch-depth: 1 - name: Checkout trusted packaging tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} @@ -657,7 +657,7 @@ jobs: plugin: ${{ fromJson(inputs.preflight_only && !inputs.trusted_publisher_preflight && needs.preview_plugins_npm.outputs.all_matrix || needs.preview_plugins_npm.outputs.matrix) }} steps: - name: Checkout trusted npm preflight tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} @@ -1069,14 +1069,14 @@ jobs: id-token: write steps: - name: Checkout trusted OIDC preflight tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} fetch-depth: 1 - name: Setup trusted Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -1123,14 +1123,14 @@ jobs: plugin: ${{ fromJson(needs.preview_plugins_npm.outputs.matrix) }} steps: - name: Checkout trusted publication tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.workflow_sha }} fetch-depth: 1 - name: Setup trusted Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} @@ -1310,7 +1310,7 @@ jobs: - name: Checkout OIDC publication target if: steps.publication_evidence.outputs.publish_route == 'npm-oidc' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.preview_plugins_npm.outputs.ref_revision }} @@ -1514,7 +1514,7 @@ jobs: plugin: ${{ fromJson(needs.preview_plugins_npm.outputs.all_matrix) }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.preview_plugins_npm.outputs.ref_revision }} diff --git a/.github/workflows/plugin-prerelease.yml b/.github/workflows/plugin-prerelease.yml index 64e7f3faec88..5099424d11e4 100644 --- a/.github/workflows/plugin-prerelease.yml +++ b/.github/workflows/plugin-prerelease.yml @@ -126,7 +126,7 @@ jobs: EOF - name: Checkout target - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.target_ref }} fetch-depth: 1 @@ -135,7 +135,7 @@ jobs: submodules: false - name: Setup manifest TypeScript runtime - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24.x" @@ -329,7 +329,7 @@ jobs: matrix: ${{ fromJson(needs.preflight.outputs.plugin_prerelease_static_matrix) }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.checkout_revision }} fetch-depth: 1 @@ -366,7 +366,7 @@ jobs: matrix: ${{ fromJson(needs.preflight.outputs.plugin_prerelease_node_matrix) }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.checkout_revision }} fetch-depth: 1 @@ -376,7 +376,7 @@ jobs: - name: Checkout trusted npm security inventory if: inputs.full_release_validation - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} path: .plugin-prerelease-trusted @@ -476,7 +476,7 @@ jobs: matrix: ${{ fromJson(needs.preflight.outputs.plugin_prerelease_extension_matrix) }} steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.checkout_revision }} fetch-depth: 1 @@ -509,7 +509,7 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ needs.preflight.outputs.checkout_revision }} fetch-depth: 1 @@ -525,7 +525,7 @@ jobs: - name: Run plugin inspector advisory sweep env: - OPENCLAW_PLUGIN_INSPECTOR_VERSION: "0.3.10" + OPENCLAW_PLUGIN_INSPECTOR_VERSION: "0.3.21" OPENCLAW_PLUGIN_INSPECTOR_ROOT: .artifacts/plugin-inspector shell: bash run: | diff --git a/.github/workflows/pr-ci-sweeper.yml b/.github/workflows/pr-ci-sweeper.yml index a323921da541..dd84e0d4ea1b 100644 --- a/.github/workflows/pr-ci-sweeper.yml +++ b/.github/workflows/pr-ci-sweeper.yml @@ -30,7 +30,7 @@ jobs: contents: read runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} persist-credentials: false diff --git a/.github/workflows/qa-live-transports-convex.yml b/.github/workflows/qa-live-transports-convex.yml index fdc0dc3c3156..2576ad08347f 100644 --- a/.github/workflows/qa-live-transports-convex.yml +++ b/.github/workflows/qa-live-transports-convex.yml @@ -179,7 +179,7 @@ jobs: trusted_reason: ${{ steps.validate.outputs.trusted_reason }} steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ github.event_name != 'schedule' && inputs.ref || github.sha }} @@ -265,7 +265,7 @@ jobs: OPENCLAW_LIVE_SETUP_TOKEN_VALUE: "" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -335,7 +335,7 @@ jobs: OPENCLAW_QA_REDACT_PUBLIC_METADATA: "1" steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -441,7 +441,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -506,7 +506,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -642,7 +642,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -740,7 +740,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -829,7 +829,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} @@ -905,7 +905,7 @@ jobs: environment: qa-live-shared steps: - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ needs.validate_selected_ref.outputs.selected_revision }} diff --git a/.github/workflows/qa-profile-evidence.yml b/.github/workflows/qa-profile-evidence.yml index ed8783b11924..7fe13ac33955 100644 --- a/.github/workflows/qa-profile-evidence.yml +++ b/.github/workflows/qa-profile-evidence.yml @@ -196,7 +196,7 @@ jobs: NODE - name: Checkout selected ref - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false ref: ${{ inputs.ref }} @@ -334,7 +334,7 @@ jobs: } - name: Checkout trusted QA harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/openclaw ref: main @@ -496,7 +496,7 @@ jobs: } - name: Checkout trusted QA harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/openclaw ref: main @@ -801,7 +801,7 @@ jobs: } - name: Checkout trusted QA harness - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/openclaw ref: main diff --git a/.github/workflows/real-behavior-proof.yml b/.github/workflows/real-behavior-proof.yml index 674e1a504576..be09433f4590 100644 --- a/.github/workflows/real-behavior-proof.yml +++ b/.github/workflows/real-behavior-proof.yml @@ -28,7 +28,7 @@ jobs: pull-requests: read runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # Old PR events can carry a stale base SHA that predates current # trusted checker scripts. Use the workflow revision instead. diff --git a/.github/workflows/sandbox-common-smoke.yml b/.github/workflows/sandbox-common-smoke.yml index ad8faaa000bc..f7a76cddd257 100644 --- a/.github/workflows/sandbox-common-smoke.yml +++ b/.github/workflows/sandbox-common-smoke.yml @@ -31,12 +31,12 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: submodules: false - name: Set up Docker Builder - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4 + uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Build minimal sandbox base (USER sandbox) shell: bash diff --git a/.github/workflows/security-sensitive-guard.yml b/.github/workflows/security-sensitive-guard.yml index 1cc3c5ba2ac0..232b0df4f17f 100644 --- a/.github/workflows/security-sensitive-guard.yml +++ b/.github/workflows/security-sensitive-guard.yml @@ -20,7 +20,7 @@ jobs: timeout-minutes: 5 steps: - name: Check out trusted base workflow scripts - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} persist-credentials: false @@ -41,7 +41,7 @@ jobs: timeout-minutes: 5 steps: - name: Check out trusted base workflow scripts - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.workflow_sha }} persist-credentials: false diff --git a/.github/workflows/shared-openclawkit-periphery.yml b/.github/workflows/shared-openclawkit-periphery.yml index 2b59e1502f89..d8f304b15cae 100644 --- a/.github/workflows/shared-openclawkit-periphery.yml +++ b/.github/workflows/shared-openclawkit-periphery.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout if: github.event_name == 'pull_request' && github.event.pull_request.draft == false - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 fetch-tags: false @@ -77,7 +77,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -87,7 +87,7 @@ jobs: - name: Verify Xcode run: | set -euo pipefail - for xcode_app in /Applications/Xcode_26.5.app /Applications/Xcode-26.5.0.app; do + for xcode_app in /Applications/Xcode_26.6.app /Applications/Xcode-26.6.0.app; do if [ -d "$xcode_app/Contents/Developer" ]; then sudo xcode-select -s "$xcode_app/Contents/Developer" break @@ -95,8 +95,8 @@ jobs: done xcodebuild -version xcode_version="$(xcodebuild -version | awk 'NR == 1 { print $2 }')" - if [[ "$xcode_version" != 26.* ]]; then - echo "error: expected Xcode 26.x, got $xcode_version" >&2 + if [[ "$xcode_version" != 26.6* ]]; then + echo "error: expected Xcode 26.6, got $xcode_version" >&2 exit 1 fi swift --version @@ -173,7 +173,7 @@ jobs: timeout-minutes: 45 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false @@ -183,7 +183,7 @@ jobs: - name: Verify Xcode run: | set -euo pipefail - for xcode_app in /Applications/Xcode_26.5.app /Applications/Xcode-26.5.0.app; do + for xcode_app in /Applications/Xcode_26.6.app /Applications/Xcode-26.6.0.app; do if [ -d "$xcode_app/Contents/Developer" ]; then sudo xcode-select -s "$xcode_app/Contents/Developer" break @@ -191,8 +191,8 @@ jobs: done xcodebuild -version xcode_version="$(xcodebuild -version | awk 'NR == 1 { print $2 }')" - if [[ "$xcode_version" != 26.* ]]; then - echo "error: expected Xcode 26.x, got $xcode_version" >&2 + if [[ "$xcode_version" != 26.6* ]]; then + echo "error: expected Xcode 26.6, got $xcode_version" >&2 exit 1 fi swift --version @@ -242,7 +242,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 fetch-tags: false diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index fc640a5a1e4e..094d76d2196b 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -65,7 +65,7 @@ jobs: - name: Mark stale unassigned issues and pull requests (primary) id: stale-primary continue-on-error: true - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ steps.app-token.outputs.token || steps.app-token-fallback.outputs.token }} days-before-issue-stale: 14 @@ -98,7 +98,7 @@ jobs: - name: Mark stale assigned issues (primary) id: assigned-issue-stale-primary continue-on-error: true - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ steps.app-token.outputs.token || steps.app-token-fallback.outputs.token }} days-before-issue-stale: 30 @@ -122,7 +122,7 @@ jobs: - name: Mark stale assigned pull requests (primary) id: assigned-stale-primary continue-on-error: true - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ steps.app-token.outputs.token || steps.app-token-fallback.outputs.token }} days-before-issue-stale: -1 @@ -169,7 +169,7 @@ jobs: } - name: Mark stale unassigned issues and pull requests (fallback) if: (steps.stale-primary.outcome == 'failure' || steps.stale-state.outputs.has_state == 'true') && steps.app-token-fallback.outputs.token != '' - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ steps.app-token-fallback.outputs.token }} days-before-issue-stale: 14 @@ -201,7 +201,7 @@ jobs: That channel is the escape hatch for high-quality PRs that get auto-closed. - name: Mark stale assigned issues (fallback) if: (steps.assigned-issue-stale-primary.outcome == 'failure' || steps.stale-state.outputs.has_state == 'true') && steps.app-token-fallback.outputs.token != '' - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ steps.app-token-fallback.outputs.token }} days-before-issue-stale: 30 @@ -224,7 +224,7 @@ jobs: close-issue-reason: not_planned - name: Mark stale assigned pull requests (fallback) if: (steps.assigned-stale-primary.outcome == 'failure' || steps.stale-state.outputs.has_state == 'true') && steps.app-token-fallback.outputs.token != '' - uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10 + uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ steps.app-token-fallback.outputs.token }} days-before-issue-stale: -1 diff --git a/.github/workflows/sticky-disk-cleanup.yml b/.github/workflows/sticky-disk-cleanup.yml index 7e4c9c07ea45..0c70fc167008 100644 --- a/.github/workflows/sticky-disk-cleanup.yml +++ b/.github/workflows/sticky-disk-cleanup.yml @@ -38,7 +38,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout protected manifest - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # A rerun keeps its original workflow_dispatch SHA. Read the latest # protected manifest so removing an entry revokes deletion authority. diff --git a/.github/workflows/vercel-container-registry-publish.yml b/.github/workflows/vercel-container-registry-publish.yml index 144ed113711f..8972e28f01bd 100644 --- a/.github/workflows/vercel-container-registry-publish.yml +++ b/.github/workflows/vercel-container-registry-publish.yml @@ -21,7 +21,7 @@ on: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - NODE_VERSION: "24.15.0" + NODE_VERSION: "24.19.0" concurrency: # Alias promotion is read-then-write. Serialize VCR independently so a slow @@ -40,16 +40,16 @@ jobs: contents: read steps: - name: Checkout trusted registry tooling - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.sha }} persist-credentials: false - name: Set up Docker Builder - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0 + uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Setup trusted Node runtime - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} diff --git a/.github/workflows/vitest-cache-warm.yml b/.github/workflows/vitest-cache-warm.yml index 1fccda6fdc5b..e57c6952ace4 100644 --- a/.github/workflows/vitest-cache-warm.yml +++ b/.github/workflows/vitest-cache-warm.yml @@ -25,7 +25,7 @@ jobs: timeout-minutes: 60 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Setup Node environment id: setup-node-env @@ -75,7 +75,7 @@ jobs: - name: Save Node toolchain cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' && runner.os != 'Windows' && runner.environment != 'github-hosted' && steps.setup-node-env.outputs.node-toolchain-populated == 'true' && steps.setup-node-env.outputs.node-toolchain-cache-matched-key != steps.setup-node-env.outputs.node-toolchain-cache-key }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ steps.setup-node-env.outputs.node-toolchain-cache-path }} key: ${{ steps.setup-node-env.outputs.node-toolchain-cache-key }} @@ -83,7 +83,7 @@ jobs: - name: Save exact dependency cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.setup-node-env.outputs.dependency-cache-key != '' && steps.setup-node-env.outputs.dependency-cache-hit != 'true' }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | node_modules @@ -106,7 +106,7 @@ jobs: - name: Save pnpm store cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.setup-node-env.outputs.pnpm-store-cache-key != '' && steps.setup-node-env.outputs.pnpm-store-cache-hit != 'true' }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ${{ steps.setup-node-env.outputs.pnpm-store-cache-path }} key: ${{ steps.setup-node-env.outputs.pnpm-store-cache-key }} @@ -114,7 +114,7 @@ jobs: - name: Save Vitest transform cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.setup-node-env.outputs.vitest-cache-key != '' }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: /var/tmp/openclaw-vitest-fs-cache key: ${{ steps.setup-node-env.outputs.vitest-cache-key }} @@ -122,7 +122,7 @@ jobs: - name: Save Node compile cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.setup-node-env.outputs.node-compile-cache-key != '' }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: /var/tmp/openclaw-node-compile-cache key: ${{ steps.setup-node-env.outputs.node-compile-cache-key }} @@ -130,7 +130,7 @@ jobs: - name: Save build-all cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' && steps.setup-node-env.outputs.build-all-cache-key != '' }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .artifacts/build-all-cache key: ${{ steps.setup-node-env.outputs.build-all-cache-key }} @@ -138,7 +138,7 @@ jobs: - name: Save dist build cache if: ${{ steps.setup-node-env.outputs.cache-mode == 'read-write' }} continue-on-error: true - uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | dist/ diff --git a/.github/workflows/website-installer-sync.yml b/.github/workflows/website-installer-sync.yml index 956ce793f51a..efcc63c588cc 100644 --- a/.github/workflows/website-installer-sync.yml +++ b/.github/workflows/website-installer-sync.yml @@ -37,7 +37,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Shell syntax run: bash -n scripts/install.sh scripts/install-cli.sh @@ -67,7 +67,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: install.sh in Docker run: | timeout --kill-after=30s 20m docker run --rm \ @@ -88,7 +88,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: install.sh reports build-tool failures honestly run: | timeout --kill-after=10s 5m docker run --rm -i \ @@ -150,7 +150,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: install.sh as a non-root user run: | timeout --kill-after=30s 20m docker run --rm -i \ @@ -190,7 +190,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: install.sh on Fedora env: INSTALL_USER: ${{ matrix.user }} @@ -232,9 +232,9 @@ jobs: runs-on: macos-15 steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24 @@ -253,9 +253,9 @@ jobs: runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24 @@ -339,13 +339,13 @@ jobs: - name: Checkout OpenClaw if: env.OPENCLAW_GH_TOKEN != '' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: openclaw - name: Checkout openclaw.ai if: env.OPENCLAW_GH_TOKEN != '' - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openclaw/openclaw.ai ref: main @@ -380,7 +380,7 @@ jobs: - name: Setup Node.js if: steps.changes.outputs.changed == 'true' - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24" diff --git a/.github/workflows/windows-blacksmith-testbox.yml b/.github/workflows/windows-blacksmith-testbox.yml index 8ef458d6e8d5..8eed835c89a8 100644 --- a/.github/workflows/windows-blacksmith-testbox.yml +++ b/.github/workflows/windows-blacksmith-testbox.yml @@ -140,7 +140,7 @@ jobs: chmod 600 ~/.ssh/authorized_keys - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false submodules: false diff --git a/.github/workflows/windows-testbox-probe.yml b/.github/workflows/windows-testbox-probe.yml index 1073c302e98c..b71894f9246c 100644 --- a/.github/workflows/windows-testbox-probe.yml +++ b/.github/workflows/windows-testbox-probe.yml @@ -59,7 +59,7 @@ jobs: shell: pwsh steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.target_ref || github.ref }} persist-credentials: false diff --git a/.github/workflows/workflow-sanity.yml b/.github/workflows/workflow-sanity.yml index c0db3e7c2c8b..00078af08273 100644 --- a/.github/workflows/workflow-sanity.yml +++ b/.github/workflows/workflow-sanity.yml @@ -27,7 +27,7 @@ jobs: steps: - &workflow_sanity_checkout_step name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 1 persist-credentials: false @@ -63,7 +63,7 @@ jobs: steps: - *workflow_sanity_checkout_step - name: Setup Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.12" @@ -136,7 +136,7 @@ jobs: echo "PRE_COMMIT_CONFIG_PATH=$trusted_config" >> "$GITHUB_ENV" - name: Install pre-commit - run: python -m pip install --disable-pip-version-check pre-commit==4.2.0 + run: python -m pip install --disable-pip-version-check pre-commit==4.6.2 - name: Install ShellCheck shell: bash diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 24a3582ffc49..8938df70c9ef 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,7 +37,7 @@ repos: # GitHub Actions security audit - repo: https://github.com/zizmorcore/zizmor-pre-commit - rev: v1.28.0 + rev: 451b56af716f9f0d0c2b816503a3fd0cf8b036fa # v1.29.0 hooks: - id: zizmor args: @@ -52,7 +52,7 @@ repos: # Python checks for skills scripts - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.22 + rev: 65dbdb59d2f2d9c3bdc343c566821ad3319ddaa3 # v0.16.3 hooks: - id: ruff files: "^skills/.*\\.py$" diff --git a/Dockerfile b/Dockerfile index 885ac5ebbff7..a3552f1855b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,9 +13,9 @@ ARG OPENCLAW_BUNDLED_PLUGIN_DIR=extensions ARG OPENCLAW_DOCKER_BUILD_NODE_OPTIONS="--max-old-space-size=8192" ARG OPENCLAW_DOCKER_BUILD_TSDOWN_MAX_OLD_SPACE_MB="" ARG OPENCLAW_DOCKER_BUILD_SKIP_DTS=1 -ARG OPENCLAW_NODE_BOOKWORM_IMAGE="docker.io/library/node:24-bookworm@sha256:5711a0d445a1af54af9589066c646df387d1831a608226f4cd694fc59e745059" -ARG OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE="docker.io/library/node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d" -ARG OPENCLAW_NODE_BOOKWORM_SLIM_DIGEST="sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d" +ARG OPENCLAW_NODE_BOOKWORM_IMAGE="docker.io/library/node:24-bookworm@sha256:934240a162082fd8b8a2f90cd5114446443f1eba1c5378f6687167ca405e6584" +ARG OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE="docker.io/library/node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03" +ARG OPENCLAW_NODE_BOOKWORM_SLIM_DIGEST="sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03" # Keep in sync with .github/actions/setup-node-env/action.yml bun-version. # To update: docker buildx imagetools inspect docker.io/oven/bun: and use the manifest-list digest. ARG OPENCLAW_BUN_IMAGE="docker.io/oven/bun:1.3.14@sha256:e10577f0db68676a7024391c6e5cb4b879ebd17188ab750cf10024a6d700e5c4" diff --git a/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Compose.txt b/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Compose.txt index 7bb4974e827a..3332af93d375 100644 --- a/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Compose.txt +++ b/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Compose.txt @@ -1,7 +1,7 @@ AndroidX Compose Artifacts: - androidx.compose.material3:material3:1.4.0 -- androidx.compose.material3.adaptive:adaptive:1.2.0 +- androidx.compose.material3.adaptive:adaptive:1.3.0 - androidx.compose.material3:material3-adaptive-navigation-suite:1.4.0 Copyright 2020 The Android Open Source Project diff --git a/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Media3.txt b/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Media3.txt index 2a292a606b7e..df41ca964f62 100644 --- a/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Media3.txt +++ b/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Media3.txt @@ -1,8 +1,8 @@ AndroidX Media3 Artifacts: -- androidx.media3:media3-datasource-okhttp:1.10.1 -- androidx.media3:media3-exoplayer:1.10.1 -- androidx.media3:media3-ui:1.10.1 +- androidx.media3:media3-datasource-okhttp:1.11.0 +- androidx.media3:media3-exoplayer:1.11.0 +- androidx.media3:media3-ui:1.11.0 Copyright 2016 The Android Open Source Project diff --git a/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Wear.txt b/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Wear.txt index b6ce82f72da2..2c436b1b8d7b 100644 --- a/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Wear.txt +++ b/apps/android/THIRD_PARTY_LICENSES/openclaw/licenses/AndroidX Wear.txt @@ -3,9 +3,9 @@ Artifacts: - androidx.wear.compose:compose-foundation:1.6.2 - androidx.wear.compose:compose-material3:1.6.2 - androidx.wear:wear-input:1.2.0 -- androidx.wear.tiles:tiles:1.6.1 -- androidx.wear.protolayout:protolayout:1.4.1 -- androidx.wear.protolayout:protolayout-material3:1.4.1 +- androidx.wear.tiles:tiles:1.6.2 +- androidx.wear.protolayout:protolayout:1.4.2 +- androidx.wear.protolayout:protolayout-material3:1.4.2 Copyright 2020 The Android Open Source Project diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/ControlUiWebView.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/ControlUiWebView.kt index e6166cf9053e..eb3f72f00293 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/ControlUiWebView.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/ControlUiWebView.kt @@ -8,11 +8,17 @@ import android.content.Context import android.content.res.Configuration import android.view.ContextThemeWrapper import android.view.View +import android.view.ViewGroup +import android.webkit.RenderProcessGoneDetail import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.runtime.key +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView @@ -35,12 +41,13 @@ internal fun ControlUiWebView( ) { val context = LocalContext.current val darkAppearance = LocalResolvedAppearanceIsDark.current + var rendererGeneration by remember { mutableIntStateOf(0) } // A WebView reads prefers-color-scheme from the Context it was built with, so an appearance // flip has to rebuild it; keying on the resolved boolean keeps that to real dark/light changes. // The reload is safe because both Control UI surfaces reattach to server-side state: the shell // outlives the page, and the desktop session lingers on the Gateway long enough to re-observe. - key(darkAppearance) { + key(darkAppearance, rendererGeneration) { AndroidView( modifier = modifier, factory = { @@ -64,14 +71,13 @@ internal fun ControlUiWebView( // The native gateway connection already established this route's trust. // Reuse only that exact accepted fingerprint; every other SSL error cancels. // The same client protects both terminal and dashboard pages. - webView.webViewClient = ControlUiWebViewClient(page) + webView.webViewClient = ControlUiWebViewClient(page) { rendererGeneration += 1 } installControlUiAuthScript(webView, page) webView.loadUrl(url) webView }, onRelease = { webView -> - webView.stopLoading() - webView.destroy() + (webView.webViewClient as? ControlUiWebViewClient)?.release(webView) }, ) } @@ -135,9 +141,35 @@ internal fun controlUiOriginRule(baseUrl: String): String? { private const val X509_CERTIFICATE_BUNDLE_KEY = "x509-certificate" +// WebKit 1.17's lint detector reports Kotlin WebViewClient constructors even when this callback exists. +@SuppressLint("MissingOnRenderProcessGone") private class ControlUiWebViewClient( private val page: NodeRuntime.GatewayControlPage, + private val onRendererGone: () -> Unit, ) : WebViewClient() { + private var released = false + + fun release(view: WebView) { + if (released) return + released = true + view.stopLoading() + view.destroy() + } + + override fun onRenderProcessGone( + view: WebView, + detail: RenderProcessGoneDetail, + ): Boolean { + if (released) return true + released = true + // The renderer cannot be reused. Detach and destroy this instance before + // advancing the Compose key so the authenticated page gets a fresh process. + (view.parent as? ViewGroup)?.removeView(view) + view.destroy() + onRendererGone() + return true + } + // Android lint cannot infer the exact pin and origin checks below; every other path cancels. // WebView exposes no pre-document certificate hook for successful CA-trusted handshakes; // this callback extends native pin trust only to recoverable self-signed errors. diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/SidebarShell.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/SidebarShell.kt index 6a79f6fe5ae5..fdf28f32a098 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/SidebarShell.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/SidebarShell.kt @@ -8,7 +8,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.ModalDrawerSheet import androidx.compose.material3.ModalNavigationDrawer import androidx.compose.material3.Text -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteType import androidx.compose.runtime.Composable @@ -93,7 +93,7 @@ internal fun AdaptiveNavigationShell( drawerContent: @Composable () -> Unit, content: @Composable () -> Unit, ) { - val adaptiveInfo = currentWindowAdaptiveInfo(supportLargeAndXLargeWidth = true) + val adaptiveInfo = currentWindowAdaptiveInfoV2() val navigationMode = adaptiveNavigationMode( widthAtLeastMedium = diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatInlineWidgetView.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatInlineWidgetView.kt index eb2a6a0ecfb2..6e885571921b 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatInlineWidgetView.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatInlineWidgetView.kt @@ -335,6 +335,8 @@ private fun deleteInlineWidgetProfile(profileName: String) { } } +// WebKit 1.17's lint detector reports Kotlin WebViewClient constructors even when this callback exists. +@SuppressLint("MissingOnRenderProcessGone") private class InlineWidgetWebViewClient( private val resource: ChatWidgetResource, private val onFailure: () -> Unit, @@ -349,7 +351,6 @@ private class InlineWidgetWebViewClient( view.setOnLongClickListener(null) view.stopLoading() closePinnedClient() - view.webViewClient = WebViewClient() view.removeAllViews() view.destroy() } diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMathRenderer.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMathRenderer.kt index ef50c673c95e..fa729cc24d3e 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMathRenderer.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMathRenderer.kt @@ -449,7 +449,8 @@ private class ChatMathWebViewBackend( // JavaScript is required only for the bundled KaTeX shell. The client blocks network loads, // rejects every URL outside the asset root, and receives LaTeX as a JSON value rather than HTML. - @SuppressLint("SetJavaScriptEnabled") + // WebKit 1.17's lint detector reports Kotlin WebViewClient constructors even when this callback exists. + @SuppressLint("SetJavaScriptEnabled", "MissingOnRenderProcessGone") @Suppress("DEPRECATION") private fun createWebView(context: Context): WebView { val view = diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMediaPlayer.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMediaPlayer.kt index 308a1e612455..45af09647791 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMediaPlayer.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMediaPlayer.kt @@ -160,7 +160,7 @@ private object ChatInlineMediaSessionCallback : MediaSession.Callback { ): MediaSession.ConnectionResult { if (!controller.isTrusted) return MediaSession.ConnectionResult.reject() return MediaSession.ConnectionResult - .AcceptedResultBuilder(session) + .AcceptedResultBuilder(session, controller) .setAvailablePlayerCommands(inlineMediaSessionPlayerCommands(session.player.availableCommands)) .build() } diff --git a/apps/android/app/src/test/java/ai/openclaw/app/ui/ControlUiWebViewTest.kt b/apps/android/app/src/test/java/ai/openclaw/app/ui/ControlUiWebViewTest.kt index 2ffe8938b887..e3230c8d8583 100644 --- a/apps/android/app/src/test/java/ai/openclaw/app/ui/ControlUiWebViewTest.kt +++ b/apps/android/app/src/test/java/ai/openclaw/app/ui/ControlUiWebViewTest.kt @@ -6,6 +6,7 @@ import android.content.res.Configuration import android.os.Looper import android.view.View import android.view.ViewGroup +import android.webkit.RenderProcessGoneDetail import android.webkit.WebView import androidx.activity.ComponentActivity import androidx.activity.compose.setContent @@ -15,6 +16,7 @@ import androidx.compose.runtime.setValue import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotSame +import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith @@ -64,6 +66,34 @@ class ControlUiWebViewTest { idleMainLooper() } + @Test + @Config(sdk = [31]) + fun rendererLossDetachesDeadWebViewAndCreatesReplacement() { + val controller = Robolectric.buildActivity(ComponentActivity::class.java).setup() + controller.get().setContent { + OpenClawTheme(themeMode = AppearanceThemeMode.System) { + TestControlUiWebView() + } + } + idleMainLooper() + val deadWebView = requireNotNull(findWebView(controller.get().window.decorView)) + + assertTrue( + deadWebView.webViewClient.onRenderProcessGone( + deadWebView, + CrashedRenderProcessDetail, + ), + ) + assertNull(deadWebView.parent) + idleMainLooper() + + val replacement = requireNotNull(findWebView(controller.get().window.decorView)) + assertNotSame(deadWebView, replacement) + + controller.pause().stop().destroy() + idleMainLooper() + } + @Test fun pinnedSslError_proceedsOnlyForExactCertificateAtGatewayOrigin() { val certificate = "accepted gateway certificate".toByteArray() @@ -172,6 +202,13 @@ class ControlUiWebViewTest { } } +@Suppress("DEPRECATION") +private object CrashedRenderProcessDetail : RenderProcessGoneDetail() { + override fun didCrash(): Boolean = true + + override fun rendererPriorityAtExit(): Int = WebView.RENDERER_PRIORITY_IMPORTANT +} + @androidx.compose.runtime.Composable private fun TestControlUiWebView() { ControlUiWebView( diff --git a/apps/android/gradle/gradle-daemon-jvm.properties b/apps/android/gradle/gradle-daemon-jvm.properties index 6c1139ec06ae..323dda408f52 100644 --- a/apps/android/gradle/gradle-daemon-jvm.properties +++ b/apps/android/gradle/gradle-daemon-jvm.properties @@ -1,12 +1,12 @@ #This file is generated by updateDaemonJvm -toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect -toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect -toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect -toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect -toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect -toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect -toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect -toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect -toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect -toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/bc7c5a81f3d680de7b32b5671550e6fa/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/06a33bd735fe2a3eaad523052759de91/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/bc7c5a81f3d680de7b32b5671550e6fa/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/06a33bd735fe2a3eaad523052759de91/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1963e5739fd691761c528d9c9417be8d/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/0c90b78f3825f6e979da37db7c92ebaa/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/bc7c5a81f3d680de7b32b5671550e6fa/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/06a33bd735fe2a3eaad523052759de91/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/fb93b09f091ba9740dea6fe657f3c66a/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/4170a8049ea45591acc1d566ebcb3193/redirect toolchainVersion=21 diff --git a/apps/android/gradle/libs.versions.toml b/apps/android/gradle/libs.versions.toml index 25bc2f93b716..3e901412e489 100644 --- a/apps/android/gradle/libs.versions.toml +++ b/apps/android/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] agp = "9.3.1" androidx-activity = "1.13.0" -androidx-appcompat = "1.7.1" +androidx-appcompat = "1.8.0" androidx-benchmark = "1.4.1" androidx-camera = "1.6.1" -androidx-compose-bom = "2026.06.01" +androidx-compose-bom = "2026.08.00" androidx-core = "1.19.0" androidx-exifinterface = "1.4.2" androidx-lifecycle = "2.11.0" @@ -12,25 +12,25 @@ androidx-security = "1.1.0" androidx-test-ext = "1.3.0" androidx-test-runner = "1.7.0" androidx-uiautomator = "2.4.0" -androidx-webkit = "1.16.0" +androidx-webkit = "1.17.0" androidx-wear-compose = "1.6.2" androidx-wear-input = "1.2.0" -androidx-wear-protolayout = "1.4.1" -androidx-wear-tiles = "1.6.1" -bcprov = "1.85" -commonmark = "0.29.0" +androidx-wear-protolayout = "1.4.2" +androidx-wear-tiles = "1.6.2" +bcprov = "1.85.2" +commonmark = "0.30.0" coil = "3.5.0" coroutines = "1.11.0" dnsjava = "3.6.5" junit = "4.13.2" -junit-vintage = "6.1.2" -kotest = "6.2.3" -ksp = "2.3.10" +junit-vintage = "6.1.3" +kotest = "6.2.4" +ksp = "2.3.11" ktlint-gradle = "14.2.0" kotlin = "2.4.10" material = "1.14.0" -media3 = "1.10.1" -okhttp = "5.4.0" +media3 = "1.11.0" +okhttp = "5.5.0" play-services-wearable = "20.0.1" barcode-scanning = "17.3.0" robolectric = "4.16.1" diff --git a/apps/android/gradle/wrapper/gradle-wrapper.jar b/apps/android/gradle/wrapper/gradle-wrapper.jar index b1b8ef56b44f..eddabd2eef8d 100644 Binary files a/apps/android/gradle/wrapper/gradle-wrapper.jar and b/apps/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/apps/android/gradle/wrapper/gradle-wrapper.properties b/apps/android/gradle/wrapper/gradle-wrapper.properties index ead03bc6cf88..84c5a9c661af 100644 --- a/apps/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/android/gradle/wrapper/gradle-wrapper.properties @@ -1,8 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -# Gradle 9.5+ exposes deprecated project-dependency notation inside AGP 9.2.1. -distributionSha256Sum=9c0f7faeeb306cb14e4279a3e084ca6b596894089a0638e68a07c945a32c9e14 -distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip +distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip networkTimeout=10000 retries=0 retryBackOffMs=500 diff --git a/apps/ios/project.yml b/apps/ios/project.yml index fc0002f37c4f..332ebcd53296 100644 --- a/apps/ios/project.yml +++ b/apps/ios/project.yml @@ -17,7 +17,7 @@ packages: path: ../swabble WebRTC: url: https://github.com/stasel/WebRTC.git - exactVersion: 147.0.0 + exactVersion: 151.0.0 schemes: OpenClaw: diff --git a/apps/linux/src-tauri/Cargo.lock b/apps/linux/src-tauri/Cargo.lock index 247a369cef72..d7f1a2599145 100644 --- a/apps/linux/src-tauri/Cargo.lock +++ b/apps/linux/src-tauri/Cargo.lock @@ -247,9 +247,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "bit-set" @@ -1303,9 +1303,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" @@ -1320,9 +1320,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -1339,32 +1339,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] name = "futures-sink" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-io", @@ -2372,9 +2372,9 @@ dependencies = [ [[package]] name = "mdns-sd" -version = "0.20.3" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86dbb9f00c8c367f75ed3a775d3eb31d0375a72f58275ef64a1bc53c255a2ce2" +checksum = "ba97b4c886eea3c2823388120d92063c011ac866919ffc4200a0e4b1642a54a5" dependencies = [ "fastrand", "flume", @@ -2787,7 +2787,7 @@ dependencies = [ name = "openclaw-desktop-linux" version = "0.1.0" dependencies = [ - "base64 0.23.0", + "base64 0.23.1", "ed25519-dalek", "futures-util", "getrandom 0.4.3", @@ -3381,9 +3381,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.42" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "once_cell", "ring", @@ -5112,9 +5112,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.24.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -5990,9 +5990,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.18.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -6026,14 +6026,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.18.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", "zbus_names", "zvariant", "zvariant_utils", @@ -6050,6 +6050,15 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zcheapstr" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "769381976ea05c1f0abde0ca527b02e415bccbdbad148534a2b0c1901c9ab934" +dependencies = [ + "serde", +] + [[package]] name = "zerofrom" version = "0.1.8" @@ -6130,40 +6139,41 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zvariant" -version = "5.13.1" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" +checksum = "b5e28c25bd8bb8da5a1f3e7065d0c156b9ee9a7973adf78b0e35eaefdf3b1b5c" dependencies = [ "endi", "enumflags2", "serde", "winnow 1.0.4", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.13.1" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" +checksum = "d496a145685283b67e232bd9e47377f6b60ad9d51e3601b23867f77c42477f96" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.5.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" +checksum = "629d80ece222cad20fe0e8741be493c4ab166acf3b85341bdc2cdbcfd8f3c2d6" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.119", + "syn 3.0.3", "winnow 1.0.4", ] diff --git a/apps/linux/src-tauri/Cargo.toml b/apps/linux/src-tauri/Cargo.toml index a78794b00127..2c4da3cf883a 100644 --- a/apps/linux/src-tauri/Cargo.toml +++ b/apps/linux/src-tauri/Cargo.toml @@ -3,7 +3,7 @@ name = "openclaw-desktop-linux" version = "0.1.0" description = "OpenClaw desktop companion for Linux" edition = "2021" -rust-version = "1.93" +rust-version = "1.97.1" [[bin]] name = "openclaw-desktop" @@ -13,12 +13,12 @@ path = "src/main.rs" tauri-build = { version = "2.6.3", features = [] } [dependencies] -base64 = "0.23.0" +base64 = "0.23.1" ed25519-dalek = "3.0.0" -futures-util = "0.3.33" +futures-util = "0.3.34" getrandom = "0.4.3" -mdns-sd = { version = "0.20", default-features = false } -rustls = { version = "0.23.42", default-features = false, features = ["ring", "std", "tls12"] } +mdns-sd = { version = "0.21.0", default-features = false } +rustls = { version = "0.23.43", default-features = false, features = ["ring", "std", "tls12"] } serde = { version = "1.0.229", features = ["derive"] } serde_json = "1.0.151" sha2 = "0.11.0" @@ -43,13 +43,13 @@ tauri-plugin-updater = "2.10.1" tauri-plugin-window-state = "2.4.1" tokio = { version = "1.53.1", features = ["macros", "sync", "time"] } tokio-tungstenite = { version = "0.30.0", features = ["rustls-tls-native-roots"] } -uuid = { version = "1.24.0", features = ["v4"] } +uuid = { version = "1.24.1", features = ["v4"] } zeroize = "1.9.0" [target.'cfg(target_os = "linux")'.dependencies] libc = "0.2.189" tauri-plugin-notifications = { git = "https://github.com/steipete/tauri-plugin-notifications.git", rev = "d20b4ff0e0e327e49fee80903478f825eac5a71a" } -zbus = { version = "5", default-features = false, features = ["tokio"] } +zbus = { version = "5.19.0", default-features = false, features = ["tokio"] } [target.'cfg(target_os = "macos")'.dependencies] tauri-plugin-notifications = { git = "https://github.com/steipete/tauri-plugin-notifications.git", rev = "d20b4ff0e0e327e49fee80903478f825eac5a71a", default-features = false } diff --git a/apps/macos-mlx-tts/Package.resolved b/apps/macos-mlx-tts/Package.resolved index 5054c1a7553c..576c2aa7e7d6 100644 --- a/apps/macos-mlx-tts/Package.resolved +++ b/apps/macos-mlx-tts/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "73589827a4186a7ccf8e3c7f89c558c34d1fbf6a7e83dd465b2c3d20cbae9b98", + "originHash" : "0337a03dc737976bd030c29f91ddbef7a2b1c184595df82d0cd1e29d35eb0159", "pins" : [ { "identity" : "eventsource", @@ -95,8 +95,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/huggingface/swift-jinja.git", "state" : { - "revision" : "9cde95abb5a01c6428137a5f9b50a2b994b53c25", - "version" : "2.4.1" + "revision" : "7d0b8880ef8e567dd4e0089f8b99fb354129017c", + "version" : "2.4.2" } }, { @@ -131,8 +131,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-system.git", "state" : { - "revision" : "b5544ba79a70a0cb3563e75bf26dc198d6b40ed3", - "version" : "1.7.4" + "revision" : "869129b7bf4ecc57b97d0193ad29690ca2134750", + "version" : "1.8.1" } }, { diff --git a/apps/macos-mlx-tts/Package.swift b/apps/macos-mlx-tts/Package.swift index aa25430a36b6..563eed5d96fc 100644 --- a/apps/macos-mlx-tts/Package.swift +++ b/apps/macos-mlx-tts/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.2 +// swift-tools-version: 6.3 // Isolated MLX TTS helper package. Keep this out of apps/macos/Package.swift so // normal macOS app tests do not compile the full MLX audio stack. diff --git a/apps/macos/Package.resolved b/apps/macos/Package.resolved index bf883ace49c6..6c2e23e7917e 100644 --- a/apps/macos/Package.resolved +++ b/apps/macos/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "949a355d05c2a77feedbaf17a498146c576e7e7c8b12a741670a37cfb2501561", + "originHash" : "bee9a68d02fcc048ed73cb8cd96636d82cdadb25e1f4be271924d71f7c3c9384", "pins" : [ { "identity" : "axorcist", @@ -51,8 +51,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/orchetect/MenuBarExtraAccess", "state" : { - "revision" : "33bb0e4b1e407feac791e047dcaaf9c69b25fd26", - "version" : "1.3.0" + "revision" : "e93e3a5b814714bf4d4cea67bf63a6b6a8323968", + "version" : "1.3.1" } }, { @@ -68,8 +68,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/sparkle-project/Sparkle", "state" : { - "revision" : "b6496a74a087257ef5e6da1c5b29a447a60f5bd7", - "version" : "2.9.4" + "revision" : "79bc9e872948e47877e76f194cb0c8e0412b0b90", + "version" : "2.9.5" } }, { @@ -104,8 +104,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-log.git", "state" : { - "revision" : "a878e7f8f46cfc0e1125e565b5c08e7d5272dc9a", - "version" : "1.14.0" + "revision" : "3ffafb9722d5d918c614feb496c8789a3b59d222", + "version" : "1.15.0" } }, { @@ -131,8 +131,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/swiftlang/swift-subprocess.git", "state" : { - "revision" : "11633673a41f509f8945f23c96c7acd4adafd679", - "version" : "0.5.0" + "revision" : "b3937ab85dd32f6e9435914599c1519074769c1a", + "version" : "1.0.0" } }, { @@ -140,8 +140,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-system", "state" : { - "revision" : "b5544ba79a70a0cb3563e75bf26dc198d6b40ed3", - "version" : "1.7.4" + "revision" : "869129b7bf4ecc57b97d0193ad29690ca2134750", + "version" : "1.8.1" } }, { diff --git a/apps/macos/Package.swift b/apps/macos/Package.swift index ea797660ded9..f54a698b2ff8 100644 --- a/apps/macos/Package.swift +++ b/apps/macos/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.2 +// swift-tools-version: 6.3 // Package manifest for the OpenClaw macOS companion (menu bar app + IPC library). import PackageDescription @@ -16,10 +16,10 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/sindresorhus/KeyboardShortcuts", exact: "3.0.1"), - .package(url: "https://github.com/orchetect/MenuBarExtraAccess", exact: "1.3.0"), - .package(url: "https://github.com/swiftlang/swift-subprocess.git", from: "0.4.0"), - .package(url: "https://github.com/apple/swift-log.git", from: "1.12.0"), - .package(url: "https://github.com/sparkle-project/Sparkle", from: "2.9.0"), + .package(url: "https://github.com/orchetect/MenuBarExtraAccess", exact: "1.3.1"), + .package(url: "https://github.com/swiftlang/swift-subprocess.git", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-log.git", from: "1.15.0"), + .package(url: "https://github.com/sparkle-project/Sparkle", exact: "2.9.5"), .package( url: "https://github.com/openclaw/Peekaboo.git", revision: "028cd9eb2d7b413c26f02f169c5f6224b2fcb3e0"), diff --git a/apps/macos/Sources/OpenClaw/BoundedProcess.swift b/apps/macos/Sources/OpenClaw/BoundedProcess.swift index b60eb91feb0a..f8c587e3afb6 100644 --- a/apps/macos/Sources/OpenClaw/BoundedProcess.swift +++ b/apps/macos/Sources/OpenClaw/BoundedProcess.swift @@ -129,7 +129,7 @@ enum BoundedProcess { allowedDurationToNextStep: .zero), ] let configuration = Configuration( - .path(.init(path)), + executable: .path(.init(path)), arguments: Arguments(arguments), environment: environment.map(self.environment(from:)) ?? .inherit, workingDirectory: workingDirectory.map { .init($0) }, @@ -184,7 +184,7 @@ enum BoundedProcess { } } - if executionResult.closureOutput { + if executionResult.closureResult { throw BoundedProcessError.timedOut } let data = Data(executionResult.standardOutput) diff --git a/apps/macos/Sources/OpenClaw/NodeMode/MacNodeCodexThreadCatalogClient.swift b/apps/macos/Sources/OpenClaw/NodeMode/MacNodeCodexThreadCatalogClient.swift index bd18a436471f..302f72034c2e 100644 --- a/apps/macos/Sources/OpenClaw/NodeMode/MacNodeCodexThreadCatalogClient.swift +++ b/apps/macos/Sources/OpenClaw/NodeMode/MacNodeCodexThreadCatalogClient.swift @@ -285,7 +285,7 @@ final class CodexAppServerThreadClient: @unchecked Sendable { } } let configuration = Subprocess.Configuration( - .path(.init(request.invocation.executable)), + executable: .path(.init(request.invocation.executable)), arguments: Arguments(request.invocation.arguments), environment: ManagedProcess.environment(from: environment), workingDirectory: request.invocation.cwd.map { .init($0.path) }) diff --git a/apps/macos/Sources/OpenClaw/NodeMode/MacNodeHostWorker.swift b/apps/macos/Sources/OpenClaw/NodeMode/MacNodeHostWorker.swift index 7eb5997352d2..cdc92042dac2 100644 --- a/apps/macos/Sources/OpenClaw/NodeMode/MacNodeHostWorker.swift +++ b/apps/macos/Sources/OpenClaw/NodeMode/MacNodeHostWorker.swift @@ -383,7 +383,7 @@ final class MacNodeHostWorker: MacNodeHostWorking, @unchecked Sendable { timer.resume() let configuration = Subprocess.Configuration( - .path(.init(executable)), + executable: .path(.init(executable)), arguments: Arguments(Array(command.dropFirst())), environment: ManagedProcess.environment(from: environment), workingDirectory: launch.currentDirectoryURL.map { .init($0.path) }) diff --git a/apps/macos/Sources/OpenClaw/RemotePortTunnel.swift b/apps/macos/Sources/OpenClaw/RemotePortTunnel.swift index 4d8543a3d4d6..8b0f3059764f 100644 --- a/apps/macos/Sources/OpenClaw/RemotePortTunnel.swift +++ b/apps/macos/Sources/OpenClaw/RemotePortTunnel.swift @@ -179,7 +179,7 @@ final class RemotePortTunnel: @unchecked Sendable { var platformOptions = PlatformOptions() platformOptions.qualityOfService = .userInitiated let processConfiguration = Subprocess.Configuration( - .path(.init("/usr/bin/ssh")), + executable: .path(.init("/usr/bin/ssh")), arguments: Arguments(args), environment: ManagedProcess.environment(from: CommandResolver.sshEnvironment()), platformOptions: platformOptions) diff --git a/apps/macos/Sources/OpenClaw/ShellExecutor.swift b/apps/macos/Sources/OpenClaw/ShellExecutor.swift index 898e438eda4d..20bee2eb760f 100644 --- a/apps/macos/Sources/OpenClaw/ShellExecutor.swift +++ b/apps/macos/Sources/OpenClaw/ShellExecutor.swift @@ -173,7 +173,7 @@ enum ShellExecutor { allowedDurationToNextStep: .zero), ] return Configuration( - .path(.init("/usr/bin/env")), + executable: .path(.init("/usr/bin/env")), arguments: Arguments(command), environment: self.environment(from: env), workingDirectory: cwd.map { .init($0) }, @@ -226,7 +226,7 @@ enum ShellExecutor { { let result = try await Subprocess.run( configuration, - input: .standardInput, + input: .currentStandardInput, output: output.subprocessStandardOutput, error: output.subprocessStandardError) return result.terminationStatus @@ -239,13 +239,13 @@ enum ShellExecutor { { let result = try await Subprocess.run( configuration, - input: .standardInput, + input: .currentStandardInput, output: output.subprocessStandardOutput, error: output.subprocessStandardError) { execution in await self.waitForExitOrTimeout(execution: execution, timeout: timeout) } - return result.closureOutput ? .timedOut : .completed(result.terminationStatus) + return result.closureResult ? .timedOut : .completed(result.terminationStatus) } private static func waitForExitOrTimeout( @@ -294,7 +294,7 @@ enum ShellExecutor { { let result = try await Subprocess.run( configuration, - input: .standardInput, + input: .currentStandardInput, output: .sequence, error: .sequence) { execution in @@ -335,7 +335,7 @@ enum ShellExecutor { _ = Darwin.kill(-processIdentifier, SIGKILL) } } - return (result.terminationStatus, result.closureOutput) + return (result.terminationStatus, result.closureResult) } static func runDetailed( diff --git a/apps/macos/Sources/OpenClaw/TalkMLXSpeechSynthesizer.swift b/apps/macos/Sources/OpenClaw/TalkMLXSpeechSynthesizer.swift index 9068691dd369..ef6de3353bba 100644 --- a/apps/macos/Sources/OpenClaw/TalkMLXSpeechSynthesizer.swift +++ b/apps/macos/Sources/OpenClaw/TalkMLXSpeechSynthesizer.swift @@ -661,7 +661,7 @@ private actor ProcessMLXTTSTransport: MLXTTSTransport { } let configuration = Subprocess.Configuration( - .path(.init(invocation.executableURL.path)), + executable: .path(.init(invocation.executableURL.path)), arguments: Arguments(invocation.argumentPrefix)) let process = ManagedProcess.launch( configuration: configuration, diff --git a/apps/macos/Sources/OpenClawDiscovery/BoundedCommand.swift b/apps/macos/Sources/OpenClawDiscovery/BoundedCommand.swift index c31a88e06355..8d27d59405ee 100644 --- a/apps/macos/Sources/OpenClawDiscovery/BoundedCommand.swift +++ b/apps/macos/Sources/OpenClawDiscovery/BoundedCommand.swift @@ -29,10 +29,9 @@ enum BoundedCommand { arguments: Arguments(arguments), environment: subprocessEnvironment, output: .string(limit: outputLimit)) + let output = result.standardOutput.trimmingCharacters(in: .whitespacesAndNewlines) guard result.terminationStatus.isSuccess, - let output = result.standardOutput? - .trimmingCharacters(in: .whitespacesAndNewlines), - !output.isEmpty + !output.isEmpty else { return nil } diff --git a/apps/macos/Tests/OpenClawIPCTests/ManagedProcessTests.swift b/apps/macos/Tests/OpenClawIPCTests/ManagedProcessTests.swift index b9a1016332ef..1f8ddd38ac95 100644 --- a/apps/macos/Tests/OpenClawIPCTests/ManagedProcessTests.swift +++ b/apps/macos/Tests/OpenClawIPCTests/ManagedProcessTests.swift @@ -25,7 +25,7 @@ struct ManagedProcessTests { let termFile = directory.appendingPathComponent("term") let stdinPipe = Pipe() let configuration = Subprocess.Configuration( - .path(.init("/bin/sh")), + executable: .path(.init("/bin/sh")), arguments: Arguments([ "-c", #"trap 'touch "$2"; exit 0' TERM; while IFS= read -r _; do :; done; touch "$1"; while :; do sleep 1; done"#, @@ -108,7 +108,7 @@ struct ManagedProcessTests { environment: [String: String] = [:]) async throws -> ManagedProcess { let configuration = Subprocess.Configuration( - .path(.init(executable)), + executable: .path(.init(executable)), arguments: Arguments(arguments), environment: ManagedProcess.environment(from: environment)) let process = ManagedProcess.launch( diff --git a/apps/shared/OpenClawKit/Package.swift b/apps/shared/OpenClawKit/Package.swift index 92ce8a67f11c..06089dda6d7b 100644 --- a/apps/shared/OpenClawKit/Package.swift +++ b/apps/shared/OpenClawKit/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.2 +// swift-tools-version: 6.3 import PackageDescription diff --git a/apps/shared/OpenClawMLXTTSProtocol/Package.swift b/apps/shared/OpenClawMLXTTSProtocol/Package.swift index fb745d2cdc90..4b8ecd213395 100644 --- a/apps/shared/OpenClawMLXTTSProtocol/Package.swift +++ b/apps/shared/OpenClawMLXTTSProtocol/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.2 +// swift-tools-version: 6.3 import PackageDescription diff --git a/apps/swabble/Package.swift b/apps/swabble/Package.swift index 3426bac565bd..26db5a2ad2e9 100644 --- a/apps/swabble/Package.swift +++ b/apps/swabble/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.2 +// swift-tools-version: 6.3 import PackageDescription let package = Package( @@ -14,7 +14,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/steipete/Commander.git", exact: "0.2.4"), - .package(url: "https://github.com/apple/swift-testing", from: "6.3.1"), + .package(url: "https://github.com/apple/swift-testing", from: "6.3.2"), ], targets: [ .target( diff --git a/config/assertion-safety-baseline.txt b/config/assertion-safety-baseline.txt index c5d636866d41..4f8da5ad5d70 100644 --- a/config/assertion-safety-baseline.txt +++ b/config/assertion-safety-baseline.txt @@ -3389,7 +3389,7 @@ src/logging/diagnostic.ts 2 src/logging/json-console-line.ts 2 src/logging/levels.ts 2 src/logging/log-file-shared.ts 1 -src/logging/logger.ts 14 +src/logging/logger.ts 13 src/logging/node-require.ts 2 src/logging/parse-log-line.ts 1 src/logging/redact-internal-state.ts 1 diff --git a/config/knip.config.ts b/config/knip.config.ts index 38979d7d2ac4..bf5ea7f088b5 100644 --- a/config/knip.config.ts +++ b/config/knip.config.ts @@ -305,6 +305,8 @@ const rootToolingAndWorkspaceDependencies = [ "marked", "oxlint", "oxlint-tsgolint", + // The scripts typecheck compiles UI Vite config against the root Vite dependency. + "postcss", "signal-utils", // Root declaration builds compile terminal-core source and resolve this package from root. "string-width", @@ -465,8 +467,8 @@ const config = { ...rootToolingAndWorkspaceDependencies, ...rootBundledPluginRuntimeDependencies, ], - // Platform tools and shell builtins used by package scripts and process-boundary tests. - ignoreBinaries: ["mint", "open", "sleep", "xcrun"], + // Platform tools, installed CLIs, and shell builtins used by scripts and boundary tests. + ignoreBinaries: ["mint", "ngrok", "open", "openclaw", "sleep", "xcrun"], // The stylelint config lives under config/, not a root default path. stylelint: { config: ["config/stylelint.config.mjs"] }, project: [ diff --git a/docs/concepts/qa-e2e-automation.md b/docs/concepts/qa-e2e-automation.md index f6131015a4b5..bcb577f16801 100644 --- a/docs/concepts/qa-e2e-automation.md +++ b/docs/concepts/qa-e2e-automation.md @@ -215,16 +215,16 @@ Matrix live implementations live under `extensions/qa-lab/src/live-transports/matrix/scenarios/`. The adapter provisions a disposable Tuwunel homeserver in Docker (default image -`ghcr.io/matrix-construct/tuwunel:v1.8.2`, pinned to its multi-architecture OCI +`ghcr.io/matrix-construct/tuwunel:v1.8.3`, pinned to its multi-architecture OCI index digest; server name `matrix-qa.test`, port `28008`), registers temporary driver, SUT, and observer users, seeds the required rooms, and records the redacted request/response boundary. It then runs the real Matrix plugin inside a child QA gateway scoped to that transport (no `qa-channel`) and tears the environment down. -The v1.8.2 GHCR index resolves to -`sha256:6f950bb139411a7964781e986321e395e045e4a6a52240a4dda9d23d04075f78`. -`docker buildx imagetools inspect ghcr.io/matrix-construct/tuwunel:v1.8.2` +The v1.8.3 GHCR index resolves to +`sha256:699fa9971c174e01c884abad8d1a3cfb2fe518e1a71f1fa16ea9dedf11873d74`. +`docker buildx imagetools inspect ghcr.io/matrix-construct/tuwunel:v1.8.3` reports manifests for `linux/arm64`, `linux/amd64`, `linux/amd64/v2`, and `linux/amd64/v3`. diff --git a/docs/nodes/computer-use.md b/docs/nodes/computer-use.md index a0fec115bac5..fdea3f609f04 100644 --- a/docs/nodes/computer-use.md +++ b/docs/nodes/computer-use.md @@ -19,7 +19,7 @@ Provider selection never falls back per action. Switching providers closes the a - **macOS fulfiller:** app setting **Allow Computer Control** enabled. It defaults on; an explicit off choice stays off. - **macOS fulfiller:** choose **Peekaboo** (default) or **CUA**. CUA is selectable only when the pinned driver is present in the signed app bundle; development builds without that artifact show **driver not bundled**. - **macOS fulfiller:** **Accessibility** and **Screen Recording** granted to OpenClaw. The native Peekaboo path also requires Event Posting access for its CoreGraphics input primitives. -- **Windows/Linux fulfiller:** bundled `cua-computer` plugin enabled on Windows x64/ARM64 or glibc-based Linux x64/ARM64. Its package includes the pinned CUA Driver SDK 0.19.3 runtime; no `cua-driver` executable, daemon, or MCP server is configured. +- **Windows/Linux fulfiller:** bundled `cua-computer` plugin enabled on Windows x64/ARM64 or glibc-based Linux x64/ARM64. Its package includes the pinned CUA Driver SDK 0.20.0 runtime; no `cua-driver` executable, daemon, or MCP server is configured. - The pairing update that includes `computer.act` approved on the gateway. - A vision-capable agent model. - Tool policy that exposes `computer`. The default `coding` profile does not. Add `computer` to `tools.alsoAllow`; sandboxed agents also need it in `tools.sandbox.tools.alsoAllow`. @@ -48,7 +48,7 @@ Screenshots are kept **model-only**: they are never auto-delivered to the chat c ### macOS app-owned daemon -The signed macOS app bundles the universal `cua-driver` 0.19.3 executable and offers **CUA** in the Computer Control provider picker. OpenClaw creates a private, owner-only socket directory under Application Support and starts `cua-driver serve --embedded` as a direct app child. It does not launch through the Gateway, the TypeScript worker, `open(1)`, or `NSWorkspace`; those paths would break macOS's TCC responsibility chain and create a second permission identity. +The signed macOS app bundles the universal `cua-driver` 0.20.0 executable and offers **CUA** in the Computer Control provider picker. OpenClaw creates a private, owner-only socket directory under Application Support and starts `cua-driver serve --embedded` as a direct app child. It does not launch through the Gateway, the TypeScript worker, `open(1)`, or `NSWorkspace`; those paths would break macOS's TCC responsibility chain and create a second permission identity. The app waits until the private socket accepts connections before advertising CUA readiness. Its TypeScript node worker starts only the unprivileged MCP proxy against that socket and maps the same typed `computer.act` v2 actions used on other platforms. Permission changes restart the daemon, and provider changes, disabling Computer Control, app shutdown, or an unexpected child exit remove the advertised CUA commands until a fresh generation is ready. @@ -56,7 +56,7 @@ The app waits until the private socket accepts connections before advertising CU The Gateway is the authorization chokepoint; the driver is a dumb effector. OpenClaw deliberately leaves the daemon unceilinged and authorizes computer use above it through tool exposure, the dangerous-command allowlist, device and command pairing approval, node-local provider enablement, and OS permissions. This is the same authorization boundary used by the shipped Peekaboo fulfiller. -CUA Driver 0.19.3 fixes its permission mode and bounded manifest when the runtime starts. Exact PID/window grants, and any application-wide window grants, must be declared in that launch-approved manifest; an `ask` entry is a hard denial for unattended dispatch. OpenClaw instead drives applications, windows, and elements discovered while the agent is running. Bounded mode therefore cannot express this provider model without duplicating Gateway policy or preauthorizing broad application classes, so the app starts its managed daemon in unrestricted mode with approvals bypassed. +CUA Driver 0.20.0 fixes its permission mode and bounded manifest when the runtime starts. Exact PID/window grants, and any application-wide window grants, must be declared in that launch-approved manifest; an `ask` entry is a hard denial for unattended dispatch. OpenClaw instead drives applications, windows, and elements discovered while the agent is running. Bounded mode therefore cannot express this provider model without duplicating Gateway policy or preauthorizing broad application classes, so the app starts its managed daemon in unrestricted mode with approvals bypassed. The `computer.act` node-invoke policy classifies exact arguments before transport dispatch. Forced app termination, browser navigation, browser downloads, browser file inputs, recording start, trajectory replay, and desktop-scope escalation are separate high-risk families; ordinary observation and input remain distinct. Classification does not add a per-action prompt or weaken the command-level gates: every action still requires the same exposed tool, armed command, approved pairing, enabled node provider, and OS permissions. @@ -134,7 +134,7 @@ The result and `window-before.png` / `window-after.png` stay under the scratch d ### Windows and Linux (experimental, direct SDK) -The bundled `cua-computer` plugin provides an experimental fulfiller for Windows and Linux node hosts. It is disabled by default on those platforms (macOS enables it by default for the CUA fulfiller above) and uses the pinned CUA Driver SDK 0.19.3 contract directly: +The bundled `cua-computer` plugin provides an experimental fulfiller for Windows and Linux node hosts. It is disabled by default on those platforms (macOS enables it by default for the CUA fulfiller above) and uses the pinned CUA Driver SDK 0.20.0 contract directly: 1. Enable the plugin: @@ -180,9 +180,9 @@ The `cua-computer` fulfiller surfaces typed error codes in the tool result and n | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `COMPUTER_DRIVER_UNAVAILABLE` | The CUA runtime cannot initialize, the macOS app-owned endpoint is absent, or the desktop permissions/session are unavailable. | On macOS, verify CUA is selected and the bundled driver is ready; on Windows/Linux, run `openclaw node run` inside the interactive desktop session. Reinstall OpenClaw if the pinned runtime is missing. | | `COMPUTER_DRIVER_PACKAGE_MISSING` | The pinned SDK package, OS/CPU native package, native library, or Node runtime is absent or unreadable. | Reinstall OpenClaw on the node host, rerun `openclaw doctor --lint --only cua-computer/driver-artifacts`, then restart the node. | -| `COMPUTER_DRIVER_VERSION_MISMATCH` | The SDK package or selected native package does not match the accepted 0.19.3 version. | Update or reinstall OpenClaw so both packages come from the same release; rerun the focused doctor check. | +| `COMPUTER_DRIVER_VERSION_MISMATCH` | The SDK package or selected native package does not match the accepted 0.20.0 version. | Update or reinstall OpenClaw so both packages come from the same release; rerun the focused doctor check. | | `COMPUTER_DRIVER_DIGEST_MISMATCH` | A native SDK library or Node runtime is not a regular package file or does not match its pinned SHA-256 digest. | Do not run or replace the file manually. Reinstall OpenClaw, rerun the focused doctor check, then restart the node. | -| `COMPUTER_DRIVER_PLATFORM_UNSUPPORTED` | The node host has no published 0.19.3 native SDK package, such as musl Linux or an unsupported CPU architecture. | Use Windows x64/ARM64 or glibc-based Linux x64/ARM64 for this provider. | +| `COMPUTER_DRIVER_PLATFORM_UNSUPPORTED` | The node host has no published 0.20.0 native SDK package, such as musl Linux or an unsupported CPU architecture. | Use Windows x64/ARM64 or glibc-based Linux x64/ARM64 for this provider. | | `COMPUTER_REFUSED_` | The driver refused the action with a structured code such as `background_unavailable`, `background_occluded`, or `foreground_unavailable` (KDE/KWin Wayland). | Bring the target window forward, switch to X11, or use a supported compositor. See the compatibility notes above. | | `COMPUTER_STALE_FRAME` | The coordinates referenced a screenshot that is no longer current (context compaction, a display geometry change, or a reference-width change). | Take a fresh `screenshot` before the coordinate action. | | `COMPUTER_STALE_OBSERVATION` | A window or browser reference belongs to an older observation, navigation, execution, or driver generation. | Run `get_window_state` or `get_browser_state` again and retry with the new opaque references. | diff --git a/extensions/acpx/package.json b/extensions/acpx/package.json index 38b36a8eda16..68ac48cb12ec 100644 --- a/extensions/acpx/package.json +++ b/extensions/acpx/package.json @@ -8,10 +8,10 @@ }, "type": "module", "dependencies": { - "@agentclientprotocol/claude-agent-acp": "0.62.0", - "@agentclientprotocol/codex-acp": "1.1.7", + "@agentclientprotocol/claude-agent-acp": "0.69.0", + "@agentclientprotocol/codex-acp": "1.4.0", "acpx": "0.13.1", - "smol-toml": "1.7.1", + "smol-toml": "1.8.0", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/acpx/skills/acp-router/SKILL.md b/extensions/acpx/skills/acp-router/SKILL.md index 0d04625afd5f..6abe7f82b487 100644 --- a/extensions/acpx/skills/acp-router/SKILL.md +++ b/extensions/acpx/skills/acp-router/SKILL.md @@ -209,8 +209,8 @@ ${ACPX_CMD} codex sessions close oc-codex- Defaults are: - `openclaw -> openclaw acp` -- `claude -> bundled @agentclientprotocol/claude-agent-acp@0.55.0` -- `codex -> bundled @agentclientprotocol/codex-acp@1.1.2 through OpenClaw's isolated CODEX_HOME wrapper` +- `claude -> bundled @agentclientprotocol/claude-agent-acp@0.69.0` +- `codex -> bundled @agentclientprotocol/codex-acp@1.4.0 through OpenClaw's isolated CODEX_HOME wrapper` - `copilot -> copilot --acp --stdio` - `cursor -> cursor-agent acp` - `droid -> droid exec --output-format acp` diff --git a/extensions/acpx/src/codex-auth-bridge.test.ts b/extensions/acpx/src/codex-auth-bridge.test.ts index 559a2a3ec4a3..27619b5bd87c 100644 --- a/extensions/acpx/src/codex-auth-bridge.test.ts +++ b/extensions/acpx/src/codex-auth-bridge.test.ts @@ -223,7 +223,7 @@ describe("prepareAcpxCodexAuthConfig", () => { }); const wrapper = await fs.readFile(generated.wrapperPath, "utf8"); - expect(wrapper).toContain('"@agentclientprotocol/codex-acp@1.1.7"'); + expect(wrapper).toContain('"@agentclientprotocol/codex-acp@1.4.0"'); expect(wrapper).toContain('"--", "codex-acp"'); expect(wrapper).not.toContain("@zed-industries/codex-acp"); }); @@ -244,7 +244,7 @@ describe("prepareAcpxCodexAuthConfig", () => { }); const wrapper = await fs.readFile(generated.wrapperPath, "utf8"); - expect(wrapper).toContain('"@agentclientprotocol/claude-agent-acp@0.62.0"'); + expect(wrapper).toContain('"@agentclientprotocol/claude-agent-acp@0.69.0"'); expect(wrapper).toContain('"--", "claude-agent-acp"'); expect(wrapper).not.toContain("@agentclientprotocol/claude-agent-acp@^0.31.0"); expect(wrapper).not.toContain("@agentclientprotocol/claude-agent-acp@0.31.0"); diff --git a/extensions/acpx/src/manifest.test.ts b/extensions/acpx/src/manifest.test.ts index 430e5c779cc1..1aec25e2355a 100644 --- a/extensions/acpx/src/manifest.test.ts +++ b/extensions/acpx/src/manifest.test.ts @@ -20,9 +20,9 @@ describe("acpx package manifest", () => { it("keeps runtime dependencies in the package manifest", () => { expect(packageJson.dependencies?.acpx).toBeTypeOf("string"); expect(packageJson.dependencies?.acpx).not.toBe(""); - expect(packageJson.dependencies?.["@agentclientprotocol/codex-acp"]).toBe("1.1.7"); + expect(packageJson.dependencies?.["@agentclientprotocol/codex-acp"]).toBe("1.4.0"); expect(packageJson.dependencies?.["@zed-industries/codex-acp"]).toBeUndefined(); - expect(packageJson.dependencies?.["@agentclientprotocol/claude-agent-acp"]).toBe("0.62.0"); + expect(packageJson.dependencies?.["@agentclientprotocol/claude-agent-acp"]).toBe("0.69.0"); expect(packageJson.devDependencies?.["@agentclientprotocol/claude-agent-acp"]).toBeUndefined(); }); diff --git a/extensions/acpx/src/runtime.test.ts b/extensions/acpx/src/runtime.test.ts index 0b3dd5c09c00..57a67b3a9756 100644 --- a/extensions/acpx/src/runtime.test.ts +++ b/extensions/acpx/src/runtime.test.ts @@ -28,7 +28,7 @@ type TestSessionStore = { const DOCUMENTED_OPENCLAW_BRIDGE_COMMAND = "env OPENCLAW_HIDE_BANNER=1 OPENCLAW_SUPPRESS_NOTES=1 openclaw acp --url ws://127.0.0.1:18789 --token-file ~/.openclaw/gateway.token --session agent:main:main"; -const CODEX_ACP_COMMAND = "npx @agentclientprotocol/codex-acp@1.1.2"; +const CODEX_ACP_COMMAND = "npx @agentclientprotocol/codex-acp@1.4.0"; const CODEX_ACP_WRAPPER_COMMAND = `node "/tmp/openclaw/acpx/codex-acp-wrapper.mjs"`; const CODEX_ACP_WRAPPER_COMMAND_WITH_LEASE = `${CODEX_ACP_WRAPPER_COMMAND} ${OPENCLAW_ACPX_LEASE_ID_ARG} lease-close ${OPENCLAW_GATEWAY_INSTANCE_ID_ARG} gateway-test`; const LOCAL_NODE_MODULES_CODEX_COMMAND = `node "${path.resolve( @@ -1295,7 +1295,7 @@ describe("AcpxRuntime fresh reset wrapper", () => { reasoningEffort: "medium", }), ).toBe( - `npx @agentclientprotocol/codex-acp@1.1.2 ${OPENCLAW_CODEX_CONFIG_ARG} '{"model":"gpt-5.4","model_reasoning_effort":"medium"}'`, + `npx @agentclientprotocol/codex-acp@1.4.0 ${OPENCLAW_CODEX_CONFIG_ARG} '{"model":"gpt-5.4","model_reasoning_effort":"medium"}'`, ); expect(testing.isCodexAcpCommand("openclaw acp")).toBe(false); expect(testing.normalizeAgentCommand(["node", "/tmp/codex acp/index.js", "--label", ""])).toBe( diff --git a/extensions/amazon-bedrock-mantle/package.json b/extensions/amazon-bedrock-mantle/package.json index 274c4287aaab..c3499882a866 100644 --- a/extensions/amazon-bedrock-mantle/package.json +++ b/extensions/amazon-bedrock-mantle/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "@anthropic-ai/sdk": "0.115.0", + "@anthropic-ai/sdk": "0.117.1", "@aws/bedrock-token-generator": "1.1.0" }, "devDependencies": { diff --git a/extensions/amazon-bedrock/package.json b/extensions/amazon-bedrock/package.json index 2dc55a2419ff..3fc70a175842 100644 --- a/extensions/amazon-bedrock/package.json +++ b/extensions/amazon-bedrock/package.json @@ -8,12 +8,12 @@ }, "type": "module", "dependencies": { - "@aws-sdk/client-bedrock": "3.1095.0", - "@aws-sdk/client-bedrock-runtime": "3.1095.0", - "@aws-sdk/credential-provider-node": "3.972.72", - "@smithy/node-http-handler": "4.9.11", - "@smithy/shared-ini-file-loader": "4.6.14", - "@smithy/types": "4.16.1" + "@aws-sdk/client-bedrock": "3.1111.0", + "@aws-sdk/client-bedrock-runtime": "3.1111.0", + "@aws-sdk/credential-provider-node": "3.972.80", + "@smithy/node-http-handler": "4.11.2", + "@smithy/shared-ini-file-loader": "4.7.2", + "@smithy/types": "4.17.2" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/anthropic-vertex/package.json b/extensions/anthropic-vertex/package.json index b26e4b55da0e..0d0ed980f50f 100644 --- a/extensions/anthropic-vertex/package.json +++ b/extensions/anthropic-vertex/package.json @@ -8,9 +8,9 @@ }, "type": "module", "dependencies": { - "@anthropic-ai/vertex-sdk": "0.19.0", + "@anthropic-ai/vertex-sdk": "0.19.4", "google-auth-library": "10.9.1", - "undici": "8.9.0" + "undici": "8.10.0" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/bonjour/manifest.test.ts b/extensions/bonjour/manifest.test.ts index 70cfa7171e5f..522874d9533e 100644 --- a/extensions/bonjour/manifest.test.ts +++ b/extensions/bonjour/manifest.test.ts @@ -16,8 +16,8 @@ describe("bonjour package manifest", () => { fs.readFileSync(new URL("../../package.json", import.meta.url), "utf8"), ) as PackageManifest; - expect(pluginPackageJson.dependencies?.["@homebridge/ciao"]).toBe("1.3.10"); - expect(rootPackageJson.dependencies?.["@homebridge/ciao"]).toBe("1.3.10"); + expect(pluginPackageJson.dependencies?.["@homebridge/ciao"]).toBe("1.3.12"); + expect(rootPackageJson.dependencies?.["@homebridge/ciao"]).toBe("1.3.12"); expect(pluginPackageJson.devDependencies?.["@homebridge/ciao"]).toBeUndefined(); }); }); diff --git a/extensions/bonjour/package.json b/extensions/bonjour/package.json index 44f61189ce70..47b160e62192 100644 --- a/extensions/bonjour/package.json +++ b/extensions/bonjour/package.json @@ -4,7 +4,7 @@ "description": "OpenClaw Bonjour/mDNS gateway discovery", "type": "module", "dependencies": { - "@homebridge/ciao": "1.3.10" + "@homebridge/ciao": "1.3.12" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/browser/package.json b/extensions/browser/package.json index 69452d56d148..30cff08983ae 100644 --- a/extensions/browser/package.json +++ b/extensions/browser/package.json @@ -8,13 +8,13 @@ "@modelcontextprotocol/sdk": "1.30.0", "express": "5.2.1", "playwright-core": "1.62.1", - "typebox": "1.3.6", - "ws": "8.21.1", + "typebox": "1.3.14", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", - "undici": "8.9.0" + "undici": "8.10.0" }, "openclaw": { "extensions": [ diff --git a/extensions/buzz/package.json b/extensions/buzz/package.json index f4b3aeefb867..e1ddc19961a8 100644 --- a/extensions/buzz/package.json +++ b/extensions/buzz/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "nostr-tools": "2.24.1", + "nostr-tools": "2.24.2", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/canvas/package.json b/extensions/canvas/package.json index d0ce6b4bda75..195eba89dbea 100644 --- a/extensions/canvas/package.json +++ b/extensions/canvas/package.json @@ -12,7 +12,7 @@ "@a2ui/web_core": "0.10.6", "@lit/context": "1.1.6", "lit": "3.3.3", - "typebox": "1.3.6" + "typebox": "1.3.14" }, "openclaw": { "extensions": [ diff --git a/extensions/clickclack/package.json b/extensions/clickclack/package.json index 84f5021d846b..7684e878f686 100644 --- a/extensions/clickclack/package.json +++ b/extensions/clickclack/package.json @@ -9,7 +9,7 @@ "./runtime-api.js": "./dist/runtime-api.js" }, "dependencies": { - "ws": "8.21.1", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/codex/package.json b/extensions/codex/package.json index 459a77b4f59d..ef2ecd8f0e27 100644 --- a/extensions/codex/package.json +++ b/extensions/codex/package.json @@ -10,9 +10,9 @@ "dependencies": { "@openai/codex": "0.148.0", "semver": "7.8.5", - "smol-toml": "1.7.1", - "typebox": "1.3.6", - "ws": "8.21.1", + "smol-toml": "1.8.0", + "typebox": "1.3.14", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/codex/src/manifest.test.ts b/extensions/codex/src/manifest.test.ts index 8cdc6b586c5a..239f0499d620 100644 --- a/extensions/codex/src/manifest.test.ts +++ b/extensions/codex/src/manifest.test.ts @@ -43,10 +43,10 @@ describe("codex package manifest", () => { const lockfile = fs.readFileSync(new URL("../../../pnpm-lock.yaml", import.meta.url), "utf8"); expect(workspace).toContain( - `"@agentclientprotocol/codex-acp@1.1.7>@openai/codex": ${CODEX_APP_SERVER_VERSION}`, + `"@agentclientprotocol/codex-acp@1.4.0>@openai/codex": ${CODEX_APP_SERVER_VERSION}`, ); expect(lockfile).toContain( - `'@agentclientprotocol/codex-acp@1.1.7>@openai/codex': ${CODEX_APP_SERVER_VERSION}`, + `'@agentclientprotocol/codex-acp@1.4.0>@openai/codex': ${CODEX_APP_SERVER_VERSION}`, ); const lockedCodexVersions = new Set( [...lockfile.matchAll(/@openai\/codex@(\d+\.\d+\.\d+)/g)].map((match) => match[1]), diff --git a/extensions/copilot/package.json b/extensions/copilot/package.json index 20ae13cf04c1..e371db6604fa 100644 --- a/extensions/copilot/package.json +++ b/extensions/copilot/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "@github/copilot-sdk": "1.0.7" + "@github/copilot-sdk": "1.0.11" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/copilot/src/event-bridge-transcript.ts b/extensions/copilot/src/event-bridge-transcript.ts index 1c161c72e9c9..73c00369d9f9 100644 --- a/extensions/copilot/src/event-bridge-transcript.ts +++ b/extensions/copilot/src/event-bridge-transcript.ts @@ -2,7 +2,10 @@ import type { Attachment, SessionEvent } from "@github/copilot-sdk"; import type { AgentMessage } from "openclaw/plugin-sdk/agent-harness-runtime"; import { sanitizeToolResult } from "openclaw/plugin-sdk/agent-harness-runtime"; import { parseDateStringTimestampMs } from "openclaw/plugin-sdk/number-runtime"; -import { readNonEmptyStringPreservingWhitespace as readNonEmptyString } from "openclaw/plugin-sdk/string-coerce-runtime"; +import { + asNonArrayRecord, + readNonEmptyStringPreservingWhitespace as readNonEmptyString, +} from "openclaw/plugin-sdk/string-coerce-runtime"; import { buildCopilotAssistantUsage, type CopilotUsageSnapshot } from "./usage-bridge.js"; export type AssistantMessage = Extract; @@ -54,7 +57,7 @@ export function buildAssistantMessage(params: { } for (const request of toolRequests) { content.push({ - arguments: request.arguments ?? {}, + arguments: asNonArrayRecord(request.arguments), id: request.toolCallId, name: request.name, type: "toolCall", diff --git a/extensions/cua-computer/package.json b/extensions/cua-computer/package.json index 861eb2cbed46..f08fc3e9c2b2 100644 --- a/extensions/cua-computer/package.json +++ b/extensions/cua-computer/package.json @@ -4,8 +4,8 @@ "description": "Experimental CUA Driver computer control for macOS, Windows, and Linux node hosts", "type": "module", "dependencies": { - "@trycua/cua-driver": "0.19.3", - "rastermill": "0.3.1", + "@trycua/cua-driver": "0.20.0", + "rastermill": "0.3.2", "zod": "4.4.3" }, "devDependencies": { @@ -13,30 +13,30 @@ }, "cuaDriverArtifacts": { "darwin-universal-binary": { - "archiveSha256": "733e28a3782ac8d325f8fce8b5d97486c1054af755b40dfd086151b34c79377e" + "archiveSha256": "07a88ea2c28a9ead66b2d9f6f93fab4b1189a1f7c704d2cd7b6d12c30eee9984" }, "linux-arm64-gnu": { "files": { - "cua_driver_node_runtime.node": "8347edcfd0a6e842d2e76bd90f465b228f36bf402c0e59da90bfac3fe6004d58", - "libcua_driver_sdk.so": "7263f8980f91585d5a02e0001042b619322bfc5cc56ca9fb626ae56fcccceb2a" + "cua_driver_node_runtime.node": "1cec7ce8136146ae580b8a6196cfee1a0e79a694284c2d06b4b513df2d054c46", + "libcua_driver_sdk.so": "3300de38e22175e32cf4a6429b68702e1896964b0f2f0866d39b10cdaea77f72" } }, "linux-x64-gnu": { "files": { - "cua_driver_node_runtime.node": "52b70432d2eb167e69632246a38d895c9e7aa61618a31638d393ad6838117293", - "libcua_driver_sdk.so": "31c142f5c67443a1fa933160bfa20d93b9914220fb9a47f2884d38df20ab0671" + "cua_driver_node_runtime.node": "d1ae4f2d0a1e9f48173c0498da9b2c5857194a7d18c7eff79293f0764cddab8f", + "libcua_driver_sdk.so": "89c03477502334530b03c5d61db5c271e3f6d2dbfa01f6779ede011c5c7d81ef" } }, "win32-arm64-msvc": { "files": { - "cua_driver_node_runtime.node": "fe025669d1614b1ac9a82d1b6a331acd15b44caef81e5bda6a0b02e1d9a4b71f", - "cua_driver_sdk.dll": "f1f25699dbdcc05169230b8286800b69a10407abb20effd5b767629fe725f21b" + "cua_driver_node_runtime.node": "16d110aabae823ad07b83f7b5bd968a91ac29ce5eda70081e456c2f96402aaea", + "cua_driver_sdk.dll": "3eedf1a163ea375af2ec816a8c112a6323456918067969c027927bb500d26891" } }, "win32-x64-msvc": { "files": { - "cua_driver_node_runtime.node": "fa9231bfa0c3c9d6deb8ed32d29dd0ef96921b51ea6864c963fd36c99b716b1c", - "cua_driver_sdk.dll": "d7e67baef87fac1a315d86113eeb485fbf8e03e5906797f0bf79d24a990fa38b" + "cua_driver_node_runtime.node": "8b13597db8f222e3cf342498c1aed253d847bc1ffabaaaa4ece0dfcfac79f380", + "cua_driver_sdk.dll": "0c7b246c5b5d037d8d3b4a17a7d3e3ed06e059a40cc95d52a4f311ba6406d8fa" } } }, diff --git a/extensions/cua-computer/src/commands.test-helpers.ts b/extensions/cua-computer/src/commands.test-helpers.ts index 7f45299be3e1..bc2c89317d8f 100644 --- a/extensions/cua-computer/src/commands.test-helpers.ts +++ b/extensions/cua-computer/src/commands.test-helpers.ts @@ -87,7 +87,7 @@ export function driver( const typeText = vi.fn(async () => result({})); const pressKey = vi.fn(async () => result({})); const callTool = vi.fn(async () => result({})); - const callDesktopTool = vi.fn(async () => result({})); + const getCursorPosition = vi.fn(async () => result({})); const escalateScope = vi.fn(async () => ({ session: "openclaw-test", captureScope: 2, @@ -102,7 +102,7 @@ export function driver( isAvailable: () => true, resetAvailabilityCache: () => {}, callTool, - callDesktopTool, + getCursorPosition, escalateScope, getDesktopState, getScreenSize, @@ -123,7 +123,7 @@ export function driver( moveCursor, scroll, callTool, - callDesktopTool, + getCursorPosition, escalateScope, dispose, typeText, diff --git a/extensions/cua-computer/src/commands.test.ts b/extensions/cua-computer/src/commands.test.ts index 3090fefea737..a36a252f7e8c 100644 --- a/extensions/cua-computer/src/commands.test.ts +++ b/extensions/cua-computer/src/commands.test.ts @@ -645,7 +645,7 @@ describe("cua-computer provider", () => { }); it("maps remaining discovery, window lifecycle, and semantic actions", async () => { - const { session, callTool, callDesktopTool } = driver(); + const { session, callTool, getCursorPosition } = driver(); callTool.mockImplementation(async (name) => { if (name === "list_windows") { return cuaToolResult(CUA_DRIVER_CONTRACT_FIXTURES.listWindows); @@ -667,11 +667,7 @@ describe("cua-computer provider", () => { }, ); }); - callDesktopTool.mockImplementation(async (name) => - name === "get_cursor_position" - ? cuaToolResult({ x: 11, y: 12, source: "x11" }) - : cuaToolResult({}), - ); + getCursorPosition.mockResolvedValue(cuaToolResult({ x: 11, y: 12, source: "x11" })); const computer = await execution(session); const tree = JSON.parse(await computer.act('{"action":"get_accessibility_tree"}')) as { details: { windows: unknown[]; processes: unknown[] }; @@ -679,7 +675,7 @@ describe("cua-computer provider", () => { expect(tree.details.windows).toHaveLength(1); expect(tree.details.processes).toHaveLength(1); await expect(computer.act('{"action":"get_cursor_position"}')).resolves.toContain('"x":11'); - expect(callDesktopTool).toHaveBeenCalledWith("get_cursor_position", {}, undefined); + expect(getCursorPosition).toHaveBeenCalledWith(undefined); const listed = JSON.parse(await computer.act('{"action":"list_windows"}')) as { details: { windows: Array<{ windowRef: string }> }; diff --git a/extensions/cua-computer/src/commands.ts b/extensions/cua-computer/src/commands.ts index ed5c6a604818..ccf823be7a79 100644 --- a/extensions/cua-computer/src/commands.ts +++ b/extensions/cua-computer/src/commands.ts @@ -292,7 +292,7 @@ async function handleDesktopAct( throw new Error(`COMPUTER_UNSUPPORTED_ACTION: ${desktopParams.action}`); } - // Every action uses scope:"desktop", a global SendInput/XTest/wayland_desktop + // Every action targets the primary desktop, a global SendInput/XTest/wayland_desktop // injection that is inherently foreground and ignores delivery_mode (that // background-vs-foreground contract is window-targeted only). We deliberately // never send delivery_mode. diff --git a/extensions/cua-computer/src/doctor.test.ts b/extensions/cua-computer/src/doctor.test.ts index 8612bc45aab6..9b0f1412ff8e 100644 --- a/extensions/cua-computer/src/doctor.test.ts +++ b/extensions/cua-computer/src/doctor.test.ts @@ -20,7 +20,7 @@ describe("CUA Driver doctor check", () => { mocks.verify.mockReturnValue({ ok: false, code: "COMPUTER_DRIVER_VERSION_MISMATCH", - diagnostic: "COMPUTER_DRIVER_VERSION_MISMATCH: expected 0.19.3. Fix: reinstall OpenClaw.", + diagnostic: "COMPUTER_DRIVER_VERSION_MISMATCH: expected 0.20.0. Fix: reinstall OpenClaw.", fixHint: "Reinstall OpenClaw.", }); let check: HealthCheck | undefined; diff --git a/extensions/cua-computer/src/driver-artifacts-resolution.test.ts b/extensions/cua-computer/src/driver-artifacts-resolution.test.ts index b3954d2f6cf4..dc12d835a221 100644 --- a/extensions/cua-computer/src/driver-artifacts-resolution.test.ts +++ b/extensions/cua-computer/src/driver-artifacts-resolution.test.ts @@ -17,14 +17,14 @@ it("supplies the accepted artifact record without depending on the bundled modul expect(mocks.inspect).toHaveBeenCalledWith( expect.objectContaining({ pluginManifest: expect.objectContaining({ - dependencies: expect.objectContaining({ "@trycua/cua-driver": "0.19.3" }), + dependencies: expect.objectContaining({ "@trycua/cua-driver": "0.20.0" }), cuaDriverArtifacts: expect.objectContaining({ "win32-arm64-msvc": { files: { "cua_driver_node_runtime.node": - "fe025669d1614b1ac9a82d1b6a331acd15b44caef81e5bda6a0b02e1d9a4b71f", + "16d110aabae823ad07b83f7b5bd968a91ac29ce5eda70081e456c2f96402aaea", "cua_driver_sdk.dll": - "f1f25699dbdcc05169230b8286800b69a10407abb20effd5b767629fe725f21b", + "3eedf1a163ea375af2ec816a8c112a6323456918067969c027927bb500d26891", }, }, }), diff --git a/extensions/cua-computer/src/driver-artifacts.test.ts b/extensions/cua-computer/src/driver-artifacts.test.ts index 6c91d953df28..991270889b61 100644 --- a/extensions/cua-computer/src/driver-artifacts.test.ts +++ b/extensions/cua-computer/src/driver-artifacts.test.ts @@ -23,7 +23,7 @@ function createArtifactFixture( const root = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-cua-artifacts-")); temporaryDirectories.push(root); const platformKey = options.platformKey ?? "linux-x64-gnu"; - const acceptedVersion = "0.19.3"; + const acceptedVersion = "0.20.0"; const nativeFile = platformKey.startsWith("linux") ? "libcua_driver_sdk.so" : "cua_driver_sdk.dll"; @@ -80,7 +80,7 @@ describe("CUA Driver artifact verification", () => { ).toEqual({ ok: true, applicable: true, - version: "0.19.3", + version: "0.20.0", platformPackage: "@trycua/cua-driver-linux-x64-gnu", }); }); @@ -100,7 +100,7 @@ describe("CUA Driver artifact verification", () => { }); it("refuses SDK and platform package version skew", () => { - const fixture = createArtifactFixture({ platformVersion: "0.19.2" }); + const fixture = createArtifactFixture({ platformVersion: "0.19.3" }); const result = inspectCuaDriverArtifacts({ platform: "linux", @@ -110,7 +110,7 @@ describe("CUA Driver artifact verification", () => { }); expect(result).toMatchObject({ ok: false, code: "COMPUTER_DRIVER_VERSION_MISMATCH" }); - expect(result.ok ? "" : result.diagnostic).toContain("resolved @trycua/cua-driver@0.19.3"); + expect(result.ok ? "" : result.diagnostic).toContain("resolved @trycua/cua-driver@0.20.0"); }); it("refuses a native file that does not match the accepted digest", () => { diff --git a/extensions/cua-computer/src/driver-client.test.ts b/extensions/cua-computer/src/driver-client.test.ts index e143df439877..0f924e6d2f2c 100644 --- a/extensions/cua-computer/src/driver-client.test.ts +++ b/extensions/cua-computer/src/driver-client.test.ts @@ -1,11 +1,17 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; const mocks = vi.hoisted(() => ({ - close: vi.fn(), callTool: vi.fn(async () => ({})), + click: vi.fn(async () => ({})), + close: vi.fn(), create: vi.fn(), createConfigured: vi.fn(), + createDesktopTarget: vi.fn(({ displayId }: { displayId: string }) => ({ + tag: "Desktop", + inner: { displayId }, + })), createTrustedSession: vi.fn(), + drag: vi.fn(async () => ({})), endSession: vi.fn(async () => ({})), escalateSession: vi.fn(async () => ({ session: "openclaw-test", @@ -13,6 +19,7 @@ const mocks = vi.hoisted(() => ({ effectiveScope: "desktop", desktopUnlocked: true, })), + getCursorPosition: vi.fn(async () => ({})), getDesktopState: vi.fn(async () => ({})), getSessionState: vi.fn(async () => ({ session: "openclaw-test", @@ -21,15 +28,18 @@ const mocks = vi.hoisted(() => ({ desktopUnlocked: true, })), isAvailable: vi.fn(() => true), + moveCursor: vi.fn(async () => ({})), + pressKey: vi.fn(async () => ({})), + scroll: vi.fn(async () => ({})), startSession: vi.fn(async () => ({})), shutdown: vi.fn(async () => {}), + typeText: vi.fn(async () => ({})), })); const sdk = { - CaptureScope: { Window: "window", Desktop: "desktop" }, + ActionTarget: { Desktop: { new: mocks.createDesktopTarget } }, ClickButton: { Left: 0, Right: 1, Middle: 2 }, CuaDriver: { create: mocks.create, createConfigured: mocks.createConfigured }, - DesktopScope: { Desktop: 0 }, EscalationReason: { Other: "other" }, ScrollBy: { Line: 0 }, ScrollDirection: { Up: 0, Down: 1, Left: 2, Right: 3 }, @@ -60,13 +70,20 @@ describe("CUA Driver direct session", () => { shutdown: mocks.shutdown, }); mocks.createTrustedSession.mockReturnValue({ - close: mocks.close, callTool: mocks.callTool, + click: mocks.click, + close: mocks.close, + drag: mocks.drag, endSession: mocks.endSession, escalateSession: mocks.escalateSession, + getCursorPosition: mocks.getCursorPosition, getDesktopState: mocks.getDesktopState, getSessionState: mocks.getSessionState, + moveCursor: mocks.moveCursor, + pressKey: mocks.pressKey, + scroll: mocks.scroll, startSession: mocks.startSession, + typeText: mocks.typeText, }); }); @@ -86,7 +103,7 @@ describe("CUA Driver direct session", () => { }); }); - it("uses configured creation and fixed window and desktop sessions", async () => { + it("uses configured creation with one trusted lifecycle session", async () => { const driver = createCuaDriver({ loadSdk: () => sdk as never }); expect(driver.isAvailable()).toBe(true); @@ -95,91 +112,97 @@ describe("CUA Driver direct session", () => { claudeCodeCompatibility: false, authorization, }); - expect(mocks.createTrustedSession).toHaveBeenCalledTimes(2); - for (const [, options] of mocks.createTrustedSession.mock.calls) { - expect(options).toEqual( - expect.objectContaining({ - publicSession: expect.stringMatching(/^openclaw-(window|desktop)-/), - mode: "unrestricted", - ttlSeconds: authorization.maxSessionTtlSeconds, - idleTtlSeconds: authorization.maxIdleTtlSeconds, - }), - ); - } + expect(mocks.createTrustedSession).toHaveBeenCalledOnce(); + expect(mocks.createTrustedSession).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + publicSession: expect.stringMatching(/^openclaw-/), + mode: "unrestricted", + ttlSeconds: authorization.maxSessionTtlSeconds, + idleTtlSeconds: authorization.maxIdleTtlSeconds, + }), + ); await driver.dispose(); await driver.dispose(); - expect(mocks.close).toHaveBeenCalledTimes(2); + expect(mocks.close).toHaveBeenCalledOnce(); expect(mocks.shutdown).toHaveBeenCalledOnce(); }); - it("starts the fixed desktop capture session once before using driver tools", async () => { + it("starts the shared lifecycle session once before using driver tools", async () => { const driver = createCuaDriver({ loadSdk: () => sdk as never }); - await Promise.all([driver.getDesktopState(), driver.getDesktopState()]); - const sessionOptions = mocks.createTrustedSession.mock.calls.find(([, options]) => - options.publicSession.startsWith("openclaw-desktop-"), - )?.[1]; + await Promise.all([driver.getDesktopState(), driver.callTool("list_windows", {})]); + const sessionOptions = mocks.createTrustedSession.mock.calls[0]?.[1]; expect(mocks.startSession).toHaveBeenCalledOnce(); expect(mocks.startSession).toHaveBeenCalledWith( - { - session: sessionOptions.publicSession, - captureScope: "desktop", - }, + { session: sessionOptions.publicSession }, + undefined, + ); + expect(mocks.getDesktopState).toHaveBeenCalledOnce(); + expect(mocks.callTool).toHaveBeenCalledWith( + "list_windows", + JSON.stringify({ session: sessionOptions.publicSession }), undefined, ); - expect(mocks.getDesktopState).toHaveBeenCalledTimes(2); await driver.dispose(); + expect(mocks.endSession).toHaveBeenCalledOnce(); expect(mocks.endSession).toHaveBeenCalledWith({ session: sessionOptions.publicSession }); }); - it("keeps the window session immutable across desktop actions and escalation", async () => { + it("targets desktop input while keeping the global cursor read untargeted", async () => { const driver = createCuaDriver({ loadSdk: () => sdk as never }); - await driver.getDesktopState(); - await driver.callTool("list_windows", {}); - await driver.callDesktopTool("get_cursor_position", {}); + await driver.click({ x: 20, y: 30, button: ClickButton.Left, count: 1 }); + await driver.drag({ fromX: 1, fromY: 2, toX: 3, toY: 4, durationMs: 5n }); + await driver.moveCursor({ x: 6, y: 7 }); + await driver.scroll({ x: 8, y: 9, direction: ScrollDirection.Down, amount: 3n }); + await driver.typeText("hello"); + await driver.pressKey({ key: "a", modifiers: ["cmd"] }); + await driver.getCursorPosition(); await driver.escalateScope(EscalationReason.Other); - await driver.callTool("list_windows", {}); - const windowOptions = mocks.createTrustedSession.mock.calls.find(([, options]) => - options.publicSession.startsWith("openclaw-window-"), - )?.[1]; - const desktopOptions = mocks.createTrustedSession.mock.calls.find(([, options]) => - options.publicSession.startsWith("openclaw-desktop-"), - )?.[1]; - expect(mocks.startSession).toHaveBeenCalledWith( - { session: windowOptions.publicSession, captureScope: "window" }, + + const sessionOptions = mocks.createTrustedSession.mock.calls[0]?.[1]; + const target = { tag: "Desktop", inner: { displayId: "primary" } }; + expect(mocks.createDesktopTarget).toHaveBeenCalledOnce(); + expect(mocks.createDesktopTarget).toHaveBeenCalledWith({ displayId: "primary" }); + expect(mocks.click).toHaveBeenCalledWith( + { x: 20, y: 30, button: ClickButton.Left, count: 1, target }, undefined, ); - expect(mocks.startSession).toHaveBeenCalledWith( - { session: desktopOptions.publicSession, captureScope: "desktop" }, + expect(mocks.drag).toHaveBeenCalledWith( + { fromX: 1, fromY: 2, toX: 3, toY: 4, durationMs: 5n, target }, undefined, ); - expect(mocks.callTool).toHaveBeenCalledTimes(3); - expect(mocks.callTool).toHaveBeenNthCalledWith( - 1, - "list_windows", - JSON.stringify({ session: windowOptions.publicSession }), + expect(mocks.moveCursor).toHaveBeenCalledWith({ x: 6, y: 7, target }, undefined); + expect(mocks.scroll).toHaveBeenCalledWith( + { + x: 8, + y: 9, + direction: ScrollDirection.Down, + amount: 3n, + by: 0, + target, + }, undefined, ); - expect(mocks.callTool).toHaveBeenCalledWith( - "get_cursor_position", - JSON.stringify({ session: desktopOptions.publicSession }), + expect(mocks.typeText).toHaveBeenCalledWith({ text: "hello", target }, undefined); + expect(mocks.pressKey).toHaveBeenCalledWith( + { key: "a", modifiers: ["cmd"], target }, + undefined, + ); + expect(mocks.getCursorPosition).toHaveBeenCalledWith( + { session: sessionOptions.publicSession }, undefined, ); expect(mocks.getSessionState).toHaveBeenCalledWith( - { session: desktopOptions.publicSession }, + { session: sessionOptions.publicSession }, undefined, ); expect(mocks.escalateSession).not.toHaveBeenCalled(); - expect(mocks.callTool).toHaveBeenNthCalledWith( - 3, - "list_windows", - JSON.stringify({ session: windowOptions.publicSession }), - undefined, - ); + await driver.dispose(); }); diff --git a/extensions/cua-computer/src/driver-client.ts b/extensions/cua-computer/src/driver-client.ts index f62c82ea57d7..858dc269f4dc 100644 --- a/extensions/cua-computer/src/driver-client.ts +++ b/extensions/cua-computer/src/driver-client.ts @@ -9,9 +9,8 @@ type DriverScrollDirection = import("@trycua/cua-driver").ScrollDirection; type CuaSessionState = import("@trycua/cua-driver").SessionStateOutput; type CuaDriverSdk = Pick< typeof import("@trycua/cua-driver"), - | "CaptureScope" + | "ActionTarget" | "CuaDriver" - | "DesktopScope" | "EscalationReason" | "ScrollBy" | "SessionPermissionMode" @@ -29,7 +28,7 @@ export const EscalationReason = { } as const; export type EscalationReason = (typeof EscalationReason)[keyof typeof EscalationReason]; -// These numeric values are part of the pinned 0.19.3 SDK contract. Keeping +// These numeric values are part of the pinned 0.20.0 SDK contract. Keeping // them local avoids loading the native library while OpenClaw is only // registering the bundled plugin. export const ClickButton = { @@ -56,11 +55,7 @@ export interface CuaDriverSession { args: Record, signal?: AbortSignal, ): Promise; - callDesktopTool( - name: string, - args: Record, - signal?: AbortSignal, - ): Promise; + getCursorPosition(signal?: AbortSignal): Promise; escalateScope(reason: EscalationReason, signal?: AbortSignal): Promise; getDesktopState(signal?: AbortSignal): Promise; getScreenSize(signal?: AbortSignal): Promise; @@ -92,14 +87,11 @@ function asyncOptions(signal?: AbortSignal) { class DirectCuaDriverSession implements CuaDriverSession { readonly generation = randomUUID(); private readonly runtime: CuaDriverLike; - private readonly windowSession: CuaDriverSessionLike; - private readonly desktopSession: CuaDriverSessionLike; - private readonly windowPublicSession = `openclaw-window-${randomUUID()}`; - private readonly desktopPublicSession = `openclaw-desktop-${randomUUID()}`; - private windowStartPromise: Promise | undefined; - private desktopStartPromise: Promise | undefined; - private windowStarted = false; - private desktopStarted = false; + private readonly session: CuaDriverSessionLike; + private readonly publicSession = `openclaw-${randomUUID()}`; + private readonly desktopTarget: import("@trycua/cua-driver").ActionTarget; + private startPromise: Promise | undefined; + private started = false; private disposed = false; constructor(private readonly sdk: CuaDriverSdk) { @@ -114,66 +106,51 @@ class DirectCuaDriverSession implements CuaDriverSession { maxIdleTtlSeconds: 300n, }; // Never use CuaDriver.create(): configured creation fixes the authorization - // ceiling before the paired window- and desktop-scope sessions are admitted. + // ceiling before the lifecycle session is admitted. this.runtime = sdk.CuaDriver.createConfigured({ claudeCodeCompatibility: false, authorization, }); - const sessionOptions = { + this.session = sdk.createTrustedSession(this.runtime, { mode: unrestricted, ttlSeconds: authorization.maxSessionTtlSeconds, idleTtlSeconds: authorization.maxIdleTtlSeconds, - }; - this.windowSession = sdk.createTrustedSession(this.runtime, { - ...sessionOptions, - publicSession: this.windowPublicSession, - }); - this.desktopSession = sdk.createTrustedSession(this.runtime, { - ...sessionOptions, - publicSession: this.desktopPublicSession, + publicSession: this.publicSession, }); + // CUA 0.20 moves modality from session state to each action. Keep one + // lifecycle/authority owner and make the desktop target explicit per call. + this.desktopTarget = sdk.ActionTarget.Desktop.new({ displayId: "primary" }); } - private async ensureSessionStarted( - kind: "window" | "desktop", - signal?: AbortSignal, - ): Promise { + private async ensureSessionStarted(signal?: AbortSignal): Promise { if (this.disposed) { throw new Error("COMPUTER_DRIVER_UNAVAILABLE: cua-computer is stopping"); } - const isWindow = kind === "window"; - const session = isWindow ? this.windowSession : this.desktopSession; - const publicSession = isWindow ? this.windowPublicSession : this.desktopPublicSession; - const captureScope = isWindow ? this.sdk.CaptureScope.Window : this.sdk.CaptureScope.Desktop; - const startedKey = isWindow ? "windowStarted" : "desktopStarted"; - const startPromiseKey = isWindow ? "windowStartPromise" : "desktopStartPromise"; - const current = this[startPromiseKey]; - if (!current) { - const start = session - .startSession({ session: publicSession, captureScope }, asyncOptions(signal)) + if (!this.startPromise) { + const start = this.session + .startSession({ session: this.publicSession }, asyncOptions(signal)) .then(() => { - this[startedKey] = true; + this.started = true; }); - this[startPromiseKey] = start; + this.startPromise = start; try { await start; } catch (error) { - if (this[startPromiseKey] === start) { - this[startPromiseKey] = undefined; + if (this.startPromise === start) { + this.startPromise = undefined; } throw error; } return; } - await current; + await this.startPromise; } private async invoke( - kind: "window" | "desktop", signal: AbortSignal | undefined, operation: () => Promise, ): Promise { - await this.ensureSessionStarted(kind, signal); + await this.ensureSessionStarted(signal); return await operation(); } @@ -182,79 +159,62 @@ class DirectCuaDriverSession implements CuaDriverSession { } resetAvailabilityCache(): void {} async callTool(name: string, args: Record, signal?: AbortSignal) { - return await this.invoke("window", signal, () => - this.windowSession.callTool( + return await this.invoke(signal, () => + this.session.callTool( name, - JSON.stringify({ ...args, session: this.windowPublicSession }), + JSON.stringify({ ...args, session: this.publicSession }), asyncOptions(signal), ), ); } - async callDesktopTool(name: string, args: Record, signal?: AbortSignal) { - return await this.invoke("desktop", signal, () => - this.desktopSession.callTool( - name, - JSON.stringify({ ...args, session: this.desktopPublicSession }), - asyncOptions(signal), - ), + async getCursorPosition(signal?: AbortSignal) { + return await this.invoke(signal, () => + this.session.getCursorPosition({ session: this.publicSession }, asyncOptions(signal)), ); } async escalateScope(_reason: EscalationReason, signal?: AbortSignal) { - await this.ensureSessionStarted("desktop", signal); - return await this.desktopSession.getSessionState( - { session: this.desktopPublicSession }, + await this.ensureSessionStarted(signal); + return await this.session.getSessionState( + { session: this.publicSession }, asyncOptions(signal), ); } async getDesktopState(signal?: AbortSignal) { - return await this.invoke("desktop", signal, () => - this.desktopSession.getDesktopState({}, asyncOptions(signal)), - ); + return await this.invoke(signal, () => this.session.getDesktopState({}, asyncOptions(signal))); } async getScreenSize(signal?: AbortSignal) { - return await this.invoke("desktop", signal, () => - this.desktopSession.getScreenSize({}, asyncOptions(signal)), - ); + return await this.invoke(signal, () => this.session.getScreenSize({}, asyncOptions(signal))); } async click( input: { x: number; y: number; button: ClickButton; count: number }, signal?: AbortSignal, ) { - return await this.invoke("desktop", signal, () => - this.desktopSession.click( - { ...input, scope: this.sdk.DesktopScope.Desktop }, - asyncOptions(signal), - ), + return await this.invoke(signal, () => + this.session.click({ ...input, target: this.desktopTarget }, asyncOptions(signal)), ); } async drag( input: { fromX: number; fromY: number; toX: number; toY: number; durationMs?: bigint }, signal?: AbortSignal, ) { - return await this.invoke("desktop", signal, () => - this.desktopSession.drag( - { ...input, scope: this.sdk.DesktopScope.Desktop }, - asyncOptions(signal), - ), + return await this.invoke(signal, () => + this.session.drag({ ...input, target: this.desktopTarget }, asyncOptions(signal)), ); } async moveCursor(input: { x: number; y: number }, signal?: AbortSignal) { - return await this.invoke("desktop", signal, () => - this.desktopSession.moveCursor( - { ...input, scope: this.sdk.DesktopScope.Desktop }, - asyncOptions(signal), - ), + return await this.invoke(signal, () => + this.session.moveCursor({ ...input, target: this.desktopTarget }, asyncOptions(signal)), ); } async scroll( input: { x: number; y: number; direction: ScrollDirection; amount: bigint }, signal?: AbortSignal, ) { - return await this.invoke("desktop", signal, () => - this.desktopSession.scroll( + return await this.invoke(signal, () => + this.session.scroll( { ...input, - scope: this.sdk.DesktopScope.Desktop, + target: this.desktopTarget, by: this.sdk.ScrollBy.Line, }, asyncOptions(signal), @@ -262,19 +222,13 @@ class DirectCuaDriverSession implements CuaDriverSession { ); } async typeText(text: string, signal?: AbortSignal) { - return await this.invoke("desktop", signal, () => - this.desktopSession.typeText( - { text, scope: this.sdk.DesktopScope.Desktop }, - asyncOptions(signal), - ), + return await this.invoke(signal, () => + this.session.typeText({ text, target: this.desktopTarget }, asyncOptions(signal)), ); } async pressKey(input: { key: string; modifiers: string[] }, signal?: AbortSignal) { - return await this.invoke("desktop", signal, () => - this.desktopSession.pressKey( - { ...input, scope: this.sdk.DesktopScope.Desktop }, - asyncOptions(signal), - ), + return await this.invoke(signal, () => + this.session.pressKey({ ...input, target: this.desktopTarget }, asyncOptions(signal)), ); } @@ -284,38 +238,23 @@ class DirectCuaDriverSession implements CuaDriverSession { } this.disposed = true; let failure: unknown; - for (const entry of [ - { - session: this.windowSession, - publicSession: this.windowPublicSession, - start: this.windowStartPromise, - started: this.windowStarted, - }, - { - session: this.desktopSession, - publicSession: this.desktopPublicSession, - start: this.desktopStartPromise, - started: this.desktopStarted, - }, - ]) { + try { + await this.startPromise; + } catch (error) { + failure = error; + } + if (this.started) { try { - await entry.start; - } catch (error) { - failure ??= error; - } - if (entry.started) { - try { - await entry.session.endSession({ session: entry.publicSession }); - } catch (error) { - failure ??= error; - } - } - try { - entry.session.close(); + await this.session.endSession({ session: this.publicSession }); } catch (error) { failure ??= error; } } + try { + this.session.close(); + } catch (error) { + failure ??= error; + } try { await this.runtime.shutdown(); } catch (error) { @@ -448,8 +387,8 @@ class LazyCuaDriverSession implements CuaDriverSession { async callTool(name: string, args: Record, signal?: AbortSignal) { return await (await this.requireRuntime()).callTool(name, args, signal); } - async callDesktopTool(name: string, args: Record, signal?: AbortSignal) { - return await (await this.requireRuntime()).callDesktopTool(name, args, signal); + async getCursorPosition(signal?: AbortSignal) { + return await (await this.requireRuntime()).getCursorPosition(signal); } async escalateScope(reason: EscalationReason, signal?: AbortSignal) { return await (await this.requireRuntime()).escalateScope(reason, signal); diff --git a/extensions/cua-computer/src/mcp-driver-client.test.ts b/extensions/cua-computer/src/mcp-driver-client.test.ts index f5848623d171..5b3ad893a089 100644 --- a/extensions/cua-computer/src/mcp-driver-client.test.ts +++ b/extensions/cua-computer/src/mcp-driver-client.test.ts @@ -138,7 +138,7 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { fake.respond(request, { protocolVersion: "2025-06-18", capabilities: { tools: {} }, - serverInfo: { name: "fake-cua-driver", version: "0.19.3" }, + serverInfo: { name: "fake-cua-driver", version: "0.20.0" }, }); return; } @@ -166,6 +166,9 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { ), ); break; + case "get_cursor_position": + fake.respond(request, toolResult({ x: 11, y: 12, source: "core_graphics" })); + break; case "click": fake.respond( request, @@ -208,6 +211,8 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { screenshot_width: 200, }); expect(desktop.images).toHaveLength(1); + const cursor = await driver.getCursorPosition(); + expect(JSON.parse(cursor.structuredJson!)).toMatchObject({ x: 11, y: 12 }); const click = await driver.click({ x: 20, y: 30, button: ClickButton.Left, count: 1 }); expect(click.action).toEqual({ effect: 0, @@ -226,35 +231,29 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { const startCalls = endpoint.requests.filter( (request) => request.method === "tools/call" && request.params?.name === "start_session", ); - expect(startCalls).toHaveLength(2); - const captureScopes = startCalls.flatMap((request) => { - const scope = request.params?.arguments?.capture_scope; - return typeof scope === "string" ? [scope] : []; - }); - expect(captureScopes.toSorted((left, right) => left.localeCompare(right))).toEqual([ - "desktop", - "window", - ]); - expect(new Set(startCalls.map((request) => request.params?.arguments?.session)).size).toBe(2); - const desktopSession = startCalls.find( - (request) => request.params?.arguments?.capture_scope === "desktop", - )?.params?.arguments?.session; - const windowSession = startCalls.find( - (request) => request.params?.arguments?.capture_scope === "window", - )?.params?.arguments?.session; + expect(startCalls).toHaveLength(1); + expect(startCalls[0]?.params?.arguments).not.toHaveProperty("capture_scope"); + const session = startCalls[0]?.params?.arguments?.session; + expect(session).toEqual(expect.stringMatching(/^openclaw-/)); expect( endpoint.requests.find( (request) => request.method === "tools/call" && request.params?.name === "get_session_state", )?.params?.arguments?.session, - ).toBe(desktopSession); + ).toBe(session); expect( endpoint.requests .filter( (request) => request.method === "tools/call" && request.params?.name === "list_windows", ) .map((request) => request.params?.arguments?.session), - ).toEqual([windowSession, windowSession]); + ).toEqual([session, session]); + expect( + endpoint.requests.find( + (request) => + request.method === "tools/call" && request.params?.name === "get_cursor_position", + )?.params?.arguments, + ).toEqual({ session }); await driver.dispose(); await vi.waitFor(() => { @@ -270,7 +269,13 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { endpoint.requests.find( (request) => request.method === "tools/call" && request.params?.name === "click", )?.params?.arguments, - ).toMatchObject({ x: 20, y: 30, button: "left", count: 1, scope: "desktop" }); + ).toMatchObject({ + x: 20, + y: 30, + button: "left", + count: 1, + target: { kind: "desktop", display_id: "primary" }, + }); } finally { await endpoint.close(); } @@ -292,47 +297,6 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { } }); - it("ends a started window session when desktop startup fails", async () => { - let desktopStart: RpcRequest | undefined; - const endedSessions: unknown[] = []; - const endpoint = await createFakeEndpoint((request, fake) => { - if (request.method === "initialize") { - fake.respond(request, { - protocolVersion: "2025-06-18", - capabilities: { tools: {} }, - serverInfo: { name: "fake-cua-driver", version: "0.19.3" }, - }); - } else if (request.method === "tools/call" && request.params?.name === "start_session") { - if (request.params.arguments?.capture_scope === "desktop") { - desktopStart = request; - } else { - fake.respond(request, sessionState("window")); - } - } else if (request.method === "tools/call" && request.params?.name === "list_windows") { - fake.respond(request, toolResult({ windows: [] })); - } else if (request.method === "tools/call" && request.params?.name === "end_session") { - endedSessions.push(request.params.arguments?.session); - fake.respond(request, toolResult({ session: request.params.arguments?.session })); - } - }); - try { - const driver = createCuaMcpDriver(endpoint); - await vi.waitFor(() => expect(driver.isAvailable()).toBe(true)); - await driver.callTool("list_windows", {}); - const desktopCall = driver.getDesktopState().catch((error: unknown) => error); - await vi.waitFor(() => expect(desktopStart).toBeDefined()); - const disposeCall = driver.dispose().catch((error: unknown) => error); - endpoint.respond(desktopStart!, { ...toolResult({}), isError: true }); - - await expect(desktopCall).resolves.toBeInstanceOf(Error); - await expect(disposeCall).resolves.toBeInstanceOf(Error); - expect(endedSessions).toHaveLength(1); - expect(endedSessions[0]).toEqual(expect.stringMatching(/^openclaw-window-/)); - } finally { - await endpoint.close(); - } - }); - it("bounds pending calls and tears down the proxy on cancellation", async () => { const held: RpcRequest[] = []; const endpoint = await createFakeEndpoint((request, fake) => { @@ -340,7 +304,7 @@ describe.runIf(process.platform !== "win32")("CUA MCP proxy transport", () => { fake.respond(request, { protocolVersion: "2025-06-18", capabilities: { tools: {} }, - serverInfo: { name: "fake-cua-driver", version: "0.19.3" }, + serverInfo: { name: "fake-cua-driver", version: "0.20.0" }, }); } else if (request.method === "tools/call" && request.params?.name === "start_session") { fake.respond(request, sessionState("window")); diff --git a/extensions/cua-computer/src/mcp-driver-client.ts b/extensions/cua-computer/src/mcp-driver-client.ts index 159279f0ff29..010cae54a3fa 100644 --- a/extensions/cua-computer/src/mcp-driver-client.ts +++ b/extensions/cua-computer/src/mcp-driver-client.ts @@ -17,6 +17,7 @@ const MCP_SHUTDOWN_TIMEOUT_MS = 2_000; const MAX_MCP_LINE_BYTES = 256 * 1024 * 1024; const MAX_PENDING_REQUESTS = 64; const MAX_STDERR_BYTES = 32 * 1024; +const MCP_DESKTOP_TARGET = { kind: "desktop", display_id: "primary" } as const; const ACTION_RESULT_TOOLS = new Set([ "click", @@ -479,12 +480,9 @@ function sessionState(value: CuaToolResult): import("@trycua/cua-driver").Sessio class McpCuaDriverSession implements CuaDriverSession { readonly generation = randomUUID(); - private readonly windowPublicSession = `openclaw-window-${randomUUID()}`; - private readonly desktopPublicSession = `openclaw-desktop-${randomUUID()}`; - private windowStartPromise: Promise | undefined; - private desktopStartPromise: Promise | undefined; - private windowStarted = false; - private desktopStarted = false; + private readonly publicSession = `openclaw-${randomUUID()}`; + private startPromise: Promise | undefined; + private started = false; private disposed = false; constructor(private readonly client: CuaMcpProxyClient) {} @@ -496,44 +494,38 @@ class McpCuaDriverSession implements CuaDriverSession { resetAvailabilityCache(): void {} async callTool(name: string, args: Record, signal?: AbortSignal) { - await this.ensureStarted("window", signal); - return await this.client.callTool(name, { ...args, session: this.windowPublicSession }, signal); + return await this.sessionTool(name, args, signal); } - async callDesktopTool(name: string, args: Record, signal?: AbortSignal) { - return await this.desktopTool(name, args, signal); + async getCursorPosition(signal?: AbortSignal) { + return await this.sessionTool("get_cursor_position", {}, signal); } async escalateScope(_reason: EscalationReason, signal?: AbortSignal) { - await this.ensureStarted("desktop", signal); - const result = await this.client.callTool( - "get_session_state", - { session: this.desktopPublicSession }, - signal, - ); + const result = await this.sessionTool("get_session_state", {}, signal); return sessionState(result); } async getDesktopState(signal?: AbortSignal) { - return await this.desktopTool("get_desktop_state", {}, signal); + return await this.sessionTool("get_desktop_state", {}, signal); } async getScreenSize(signal?: AbortSignal) { - return await this.desktopTool("get_screen_size", {}, signal); + return await this.sessionTool("get_screen_size", {}, signal); } async click( input: { x: number; y: number; button: ClickButton; count: number }, signal?: AbortSignal, ) { - return await this.desktopTool( + return await this.sessionTool( "click", { x: input.x, y: input.y, button: ["left", "right", "middle"][input.button], count: input.count, - scope: "desktop", + target: MCP_DESKTOP_TARGET, }, signal, ); @@ -543,7 +535,7 @@ class McpCuaDriverSession implements CuaDriverSession { input: { fromX: number; fromY: number; toX: number; toY: number; durationMs?: bigint }, signal?: AbortSignal, ) { - return await this.desktopTool( + return await this.sessionTool( "drag", { from_x: input.fromX, @@ -551,16 +543,16 @@ class McpCuaDriverSession implements CuaDriverSession { to_x: input.toX, to_y: input.toY, ...(input.durationMs === undefined ? {} : { duration_ms: Number(input.durationMs) }), - scope: "desktop", + target: MCP_DESKTOP_TARGET, }, signal, ); } async moveCursor(input: { x: number; y: number }, signal?: AbortSignal) { - return await this.desktopTool( + return await this.sessionTool( "move_cursor", - { x: input.x, y: input.y, scope: "desktop" }, + { x: input.x, y: input.y, target: MCP_DESKTOP_TARGET }, signal, ); } @@ -569,7 +561,7 @@ class McpCuaDriverSession implements CuaDriverSession { input: { x: number; y: number; direction: ScrollDirection; amount: bigint }, signal?: AbortSignal, ) { - return await this.desktopTool( + return await this.sessionTool( "scroll", { x: input.x, @@ -577,20 +569,20 @@ class McpCuaDriverSession implements CuaDriverSession { direction: ["up", "down", "left", "right"][input.direction], by: "line", amount: Number(input.amount), - scope: "desktop", + target: MCP_DESKTOP_TARGET, }, signal, ); } async typeText(text: string, signal?: AbortSignal) { - return await this.desktopTool("type_text", { text, scope: "desktop" }, signal); + return await this.sessionTool("type_text", { text, target: MCP_DESKTOP_TARGET }, signal); } async pressKey(input: { key: string; modifiers: string[] }, signal?: AbortSignal) { - return await this.desktopTool( + return await this.sessionTool( "press_key", - { key: input.key, modifiers: input.modifiers, scope: "desktop" }, + { key: input.key, modifiers: input.modifiers, target: MCP_DESKTOP_TARGET }, signal, ); } @@ -601,29 +593,16 @@ class McpCuaDriverSession implements CuaDriverSession { } this.disposed = true; let failure: unknown; - const startResults = await Promise.allSettled([ - this.windowStartPromise, - this.desktopStartPromise, - ]); - for (const result of startResults) { - if (result.status === "rejected") { - failure ??= result.reason; - } + try { + await this.startPromise; + } catch (error) { + failure = error; } - if (this.client.isAvailable()) { - if (this.windowStarted) { - try { - await this.client.callTool("end_session", { session: this.windowPublicSession }); - } catch (error) { - failure ??= error; - } - } - if (this.desktopStarted) { - try { - await this.client.callTool("end_session", { session: this.desktopPublicSession }); - } catch (error) { - failure ??= error; - } + if (this.client.isAvailable() && this.started) { + try { + await this.client.callTool("end_session", { session: this.publicSession }); + } catch (error) { + failure ??= error; } } try { @@ -638,49 +617,40 @@ class McpCuaDriverSession implements CuaDriverSession { } } - private async desktopTool( + private async sessionTool( name: string, args: Record, signal?: AbortSignal, ): Promise { - await this.ensureStarted("desktop", signal); - return await this.client.callTool( - name, - { ...args, session: this.desktopPublicSession }, - signal, - ); + await this.ensureStarted(signal); + return await this.client.callTool(name, { ...args, session: this.publicSession }, signal); } - private async ensureStarted(scope: "window" | "desktop", signal?: AbortSignal): Promise { + private async ensureStarted(signal?: AbortSignal): Promise { if (this.disposed) { throw driverUnavailable("cua-computer is stopping"); } - const isWindow = scope === "window"; - const startedKey = isWindow ? "windowStarted" : "desktopStarted"; - const startPromiseKey = isWindow ? "windowStartPromise" : "desktopStartPromise"; - const current = this[startPromiseKey]; - if (!current) { - const publicSession = isWindow ? this.windowPublicSession : this.desktopPublicSession; + if (!this.startPromise) { const start = this.client - .callTool("start_session", { session: publicSession, capture_scope: scope }, signal) + .callTool("start_session", { session: this.publicSession }, signal) .then((result) => { if (result.isError) { throw driverProtocolError(result.text || "CUA MCP start_session failed"); } - this[startedKey] = true; + this.started = true; }); - this[startPromiseKey] = start; + this.startPromise = start; try { await start; } catch (error) { - if (this[startPromiseKey] === start) { - this[startPromiseKey] = undefined; + if (this.startPromise === start) { + this.startPromise = undefined; } throw error; } return; } - await current; + await this.startPromise; } } diff --git a/extensions/cua-computer/src/window-actions.ts b/extensions/cua-computer/src/window-actions.ts index 81201b222888..d6f545178e7c 100644 --- a/extensions/cua-computer/src/window-actions.ts +++ b/extensions/cua-computer/src/window-actions.ts @@ -274,7 +274,7 @@ export async function handleWindowAct( case "get_accessibility_tree": { if (input.windowRef || input.query || input.depth !== undefined || input.maxElements) { throw new Error( - "COMPUTER_UNSUPPORTED_ACTION: CUA Driver 0.19.3 exposes get_accessibility_tree only as unfiltered desktop discovery; use get_window_state for a window tree", + "COMPUTER_UNSUPPORTED_ACTION: CUA Driver 0.20.0 exposes get_accessibility_tree only as unfiltered desktop discovery; use get_window_state for a window tree", ); } const result = await callWindowTool(driver, state, "get_accessibility_tree", {}, signal); @@ -288,7 +288,7 @@ export async function handleWindowAct( }); } case "get_cursor_position": { - const result = await driver.callDesktopTool("get_cursor_position", {}, signal); + const result = await driver.getCursorPosition(signal); return JSON.stringify({ ok: true, details: projectedToolDetails(result, "get_cursor_position"), diff --git a/extensions/diffs/package.json b/extensions/diffs/package.json index 29bb686056c9..25637786e030 100644 --- a/extensions/diffs/package.json +++ b/extensions/diffs/package.json @@ -8,10 +8,10 @@ }, "type": "module", "dependencies": { - "@pierre/diffs": "1.2.12", - "@shikijs/langs": "4.3.1", + "@pierre/diffs": "1.3.5", + "@shikijs/langs": "4.4.3", "playwright-core": "1.62.1", - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/diffs/src/viewer-client.ts b/extensions/diffs/src/viewer-client.ts index 9a5f6050b570..3f7639bf1c58 100644 --- a/extensions/diffs/src/viewer-client.ts +++ b/extensions/diffs/src/viewer-client.ts @@ -313,13 +313,16 @@ export async function hydrateViewer(): Promise { for (const { host, payload } of cards) { try { const diff = new FileDiff(createRenderOptions(payload)); - diff.hydrate({ + const hydration = { fileContainer: host, prerenderedHTML: payload.prerenderedHTML, fileDiff: payload.fileDiff, - oldFile: payload.oldFile, - newFile: payload.newFile, - }); + }; + diff.hydrate( + payload.oldFile && payload.newFile + ? { ...hydration, oldFile: payload.oldFile, newFile: payload.newFile } + : hydration, + ); const controller = { payload, diff }; applyState(controller); controllers.push(controller); diff --git a/extensions/discord/package.json b/extensions/discord/package.json index 0047b4510b57..bd20c525b464 100644 --- a/extensions/discord/package.json +++ b/extensions/discord/package.json @@ -10,12 +10,12 @@ "dependencies": { "@discord/embedded-app-sdk": "2.5.0", "@discordjs/voice": "0.19.2", - "discord-api-types": "0.38.52", + "discord-api-types": "0.38.53", "libopus-wasm": "0.2.0", "mdast-util-from-markdown": "2.0.3", - "typebox": "1.3.6", - "undici": "8.9.0", - "ws": "8.21.1", + "typebox": "1.3.14", + "undici": "8.10.0", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/document-extract/package.json b/extensions/document-extract/package.json index 0fa76259d41d..1c4c35cce2be 100644 --- a/extensions/document-extract/package.json +++ b/extensions/document-extract/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw local document extraction plugin", "type": "module", "dependencies": { - "clawpdf": "0.3.0" + "clawpdf": "0.3.1" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json index 62f0270736af..39689160453c 100644 --- a/extensions/feishu/package.json +++ b/extensions/feishu/package.json @@ -8,11 +8,11 @@ }, "type": "module", "dependencies": { - "@larksuiteoapi/node-sdk": "1.71.1", + "@larksuiteoapi/node-sdk": "1.73.0", "mdast-util-from-markdown": "2.0.3", "mdast-util-gfm-table": "2.0.0", "micromark-extension-gfm-table": "2.1.1", - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/feishu/src/client.ts b/extensions/feishu/src/client.ts index 525b5fe55526..cc8ef2a21aa1 100644 --- a/extensions/feishu/src/client.ts +++ b/extensions/feishu/src/client.ts @@ -46,17 +46,7 @@ const feishuClientSdk: FeishuClientSdk = { WSClient: Lark.WSClient, }; -type RequestInterceptorApi = { - use: (fn: (req: unknown) => unknown) => unknown; -}; - -type FeishuDefaultHttpInstanceWithInterceptors = { - interceptors?: { - request?: RequestInterceptorApi; - }; -}; - -function setRequestUserAgent(req: unknown) { +function setRequestUserAgent(req: T): T { const request = req as { headers?: unknown }; const headers = request.headers; if (!headers) { @@ -77,15 +67,7 @@ function setRequestUserAgent(req: unknown) { // Override the SDK's default User-Agent through the public interceptor API. // The SDK fallback interceptor only fills User-Agent when it is absent, so this // interceptor can preserve the rest of the SDK's request interceptor stack. -{ - const inst = Lark.defaultHttpInstance as FeishuDefaultHttpInstanceWithInterceptors; - inst.interceptors?.request?.use(setRequestUserAgent); -} - -type FeishuHttpInstanceLike = Pick< - typeof feishuClientSdk.defaultHttpInstance, - "request" | "get" | "post" | "put" | "patch" | "delete" | "head" | "options" ->; +Lark.defaultHttpInstance.interceptors.request.use(setRequestUserAgent); function readHeader(headers: unknown, name: string): string | undefined { if (!isRecord(headers)) { @@ -277,7 +259,8 @@ function createFeishuHttpInstance( defaultTimeoutMs: number, configuredDomain?: FeishuDomain, ): Lark.HttpInstance { - const base: FeishuHttpInstanceLike = feishuClientSdk.defaultHttpInstance; + // SAFETY: The SDK owns this Axios instance and unwraps responses to its HttpInstance contract. + const base = feishuClientSdk.defaultHttpInstance as Lark.HttpInstance; const customDomain = configuredDomain && configuredDomain !== "feishu" && configuredDomain !== "lark" ? new URL(configuredDomain) diff --git a/extensions/file-transfer/package.json b/extensions/file-transfer/package.json index 75e31fa1cc37..f7aa5dee59cb 100644 --- a/extensions/file-transfer/package.json +++ b/extensions/file-transfer/package.json @@ -4,8 +4,8 @@ "description": "OpenClaw file transfer plugin (file_fetch, dir_list, dir_fetch, file_write)", "type": "module", "dependencies": { - "minimatch": "10.2.5", - "typebox": "1.3.6" + "minimatch": "10.2.6", + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/firecrawl/package.json b/extensions/firecrawl/package.json index 476193b7804c..e9e4070cc182 100644 --- a/extensions/firecrawl/package.json +++ b/extensions/firecrawl/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/google-meet/package.json b/extensions/google-meet/package.json index 8fc5f6774b10..6be1b3c53c30 100644 --- a/extensions/google-meet/package.json +++ b/extensions/google-meet/package.json @@ -9,7 +9,7 @@ "type": "module", "dependencies": { "jszip": "3.10.1", - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", diff --git a/extensions/google/package.json b/extensions/google/package.json index fcb9c3a9a331..e76c81f482d0 100644 --- a/extensions/google/package.json +++ b/extensions/google/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Google plugin", "type": "module", "dependencies": { - "@google/genai": "2.13.0", + "@google/genai": "2.17.1", "dotenv": "17.4.2", "google-auth-library": "10.9.1" }, diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json index d41a4287863c..5fe96a1675e4 100644 --- a/extensions/imessage/package.json +++ b/extensions/imessage/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/line/package.json b/extensions/line/package.json index 3e1209353d65..b20b4f7493e1 100644 --- a/extensions/line/package.json +++ b/extensions/line/package.json @@ -9,7 +9,7 @@ "type": "module", "dependencies": { "@line/bot-sdk": "11.2.0", - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/llama-cpp/src/llama-server-assets.ts b/extensions/llama-cpp/src/llama-server-assets.ts index 73fed0ae5146..40f81ac075c5 100644 --- a/extensions/llama-cpp/src/llama-server-assets.ts +++ b/extensions/llama-cpp/src/llama-server-assets.ts @@ -1,9 +1,9 @@ import path from "node:path"; import { resolveLlamaCppDataDir } from "./defaults.js"; -export const LLAMA_SERVER_RELEASE = "b10357"; -export const LLAMA_SERVER_BUILD = 10_357; -export const LLAMA_SERVER_COMMIT = "689e227db485c6b33d061555e74034c93a867649"; +export const LLAMA_SERVER_RELEASE = "b10453"; +export const LLAMA_SERVER_BUILD = 10_453; +export const LLAMA_SERVER_COMMIT = "3cb7ffb1a1f612d5e4a46244ae5a3c77ad934a70"; export type LlamaServerAsset = { platform: NodeJS.Platform; @@ -22,7 +22,7 @@ const LLAMA_SERVER_ASSETS: LlamaServerAsset[] = [ backend: "metal", archive: "tar.gz", name: `llama-${LLAMA_SERVER_RELEASE}-bin-macos-arm64.tar.gz`, - sha256: "7f464a2d473d53ebb9c1d7d16db1258ec98c371569816491850686e6a4334c52", + sha256: "f1531b1c520f8b473d83352c5eec2f4f43bd0a54f9ca1366a6f202211cfbc098", executable: "llama-server", }, { @@ -31,7 +31,7 @@ const LLAMA_SERVER_ASSETS: LlamaServerAsset[] = [ backend: "cpu", archive: "tar.gz", name: `llama-${LLAMA_SERVER_RELEASE}-bin-macos-x64.tar.gz`, - sha256: "8282cf6b30bfab87080044e98b7b78f2896bfc60414926fae6039a89c0fb6ec2", + sha256: "ac13f6f6c90c193765921bf52dd5ecf2a9d506ee9c3eadd2d6fd49ca7a5de25d", executable: "llama-server", }, { @@ -40,7 +40,7 @@ const LLAMA_SERVER_ASSETS: LlamaServerAsset[] = [ backend: "cpu", archive: "tar.gz", name: `llama-${LLAMA_SERVER_RELEASE}-bin-ubuntu-arm64.tar.gz`, - sha256: "0653b6aa14de35920824045bca7e48f98f629f41943d0fefab1e317bbe8e22a8", + sha256: "b164e72dfb69c711275178e0d0fae54748042f039e4fe7386f1c0ea7019c109c", executable: "llama-server", }, { @@ -49,7 +49,7 @@ const LLAMA_SERVER_ASSETS: LlamaServerAsset[] = [ backend: "cpu", archive: "tar.gz", name: `llama-${LLAMA_SERVER_RELEASE}-bin-ubuntu-x64.tar.gz`, - sha256: "6b0ba012036e6d727521100158bfcaa73b460fbb31acab2931c9485f347bd16b", + sha256: "550eb155a09c3051c7add5becf6d0badc3a4c33416807985963036b27b859fb4", executable: "llama-server", }, { @@ -58,7 +58,7 @@ const LLAMA_SERVER_ASSETS: LlamaServerAsset[] = [ backend: "cpu", archive: "zip", name: `llama-${LLAMA_SERVER_RELEASE}-bin-win-cpu-arm64.zip`, - sha256: "a0d73be8d3151d9401fa193f1b83c6d7401191b41786e75f0a60184058333e86", + sha256: "a8b984d478700777d4671cf33eccfddae42c1fd871e78efd43fee090131eec1f", executable: "llama-server.exe", }, { @@ -67,7 +67,7 @@ const LLAMA_SERVER_ASSETS: LlamaServerAsset[] = [ backend: "cpu", archive: "zip", name: `llama-${LLAMA_SERVER_RELEASE}-bin-win-cpu-x64.zip`, - sha256: "6c64cc7db679980fcb34bbbe96b2b1df6127e90ccdad2bd6fbe39532fee2fc4e", + sha256: "70c07211d0027305f0be09cd755d79641ebb0bb646590ff3d498c66b22df29b0", executable: "llama-server.exe", }, ]; diff --git a/extensions/llama-cpp/src/llama-server-install.test.ts b/extensions/llama-cpp/src/llama-server-install.test.ts index 5fff8c0ccdbb..e4b6853e4fb6 100644 --- a/extensions/llama-cpp/src/llama-server-install.test.ts +++ b/extensions/llama-cpp/src/llama-server-install.test.ts @@ -1,3 +1,4 @@ +import type { ExecFileException } from "node:child_process"; import { createHash } from "node:crypto"; import fs from "node:fs/promises"; import os from "node:os"; @@ -5,15 +6,28 @@ import path from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; const mocks = vi.hoisted(() => ({ + execFile: vi.fn(), fetchWithSsrFGuard: vi.fn(), + resolveLlamaCppDataDir: vi.fn(), })); +vi.mock("node:child_process", () => ({ execFile: mocks.execFile })); vi.mock("openclaw/plugin-sdk/ssrf-runtime", async (importOriginal) => ({ ...(await importOriginal()), fetchWithSsrFGuard: mocks.fetchWithSsrFGuard, })); +vi.mock("./defaults.js", async (importOriginal) => ({ + ...(await importOriginal()), + resolveLlamaCppDataDir: mocks.resolveLlamaCppDataDir, +})); -import { downloadVerifiedFile } from "./llama-server-install.js"; +import { LLAMA_SERVER_BUILD, LLAMA_SERVER_COMMIT } from "./llama-server-assets.js"; +import { + downloadVerifiedFile, + ensureLlamaServerInstalled, + resolveManagedLlamaServerPaths, + selectLlamaServerAsset, +} from "./llama-server-install.js"; type FileHandle = Awaited>; @@ -21,7 +35,9 @@ const tempRoots: string[] = []; afterEach(async () => { vi.restoreAllMocks(); + mocks.execFile.mockReset(); mocks.fetchWithSsrFGuard.mockReset(); + mocks.resolveLlamaCppDataDir.mockReset(); await Promise.all( tempRoots.splice(0).map((root) => fs.rm(root, { recursive: true, force: true })), ); @@ -33,6 +49,30 @@ async function createDestination(): Promise<{ destination: string; root: string return { destination: path.join(root, "model.gguf"), root }; } +async function createInstalledServer(): Promise { + const root = await fs.mkdtemp(path.join(os.tmpdir(), "llama-server-installed-")); + tempRoots.push(root); + mocks.resolveLlamaCppDataDir.mockReturnValue(root); + const asset = selectLlamaServerAsset(); + const { command } = resolveManagedLlamaServerPaths(asset); + await fs.mkdir(path.dirname(command), { recursive: true }); + await fs.writeFile(command, ""); + return command; +} + +function mockVersionOutput(output: string): void { + mocks.execFile.mockImplementation( + ( + _command: string, + _args: string[], + _options: unknown, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ) => { + callback(null, output, ""); + }, + ); +} + function mockDownload(payload: Buffer): ReturnType { const release = vi.fn(); mocks.fetchWithSsrFGuard.mockResolvedValue({ @@ -148,3 +188,25 @@ describe("downloadVerifiedFile", () => { expect(release).toHaveBeenCalledOnce(); }); }); + +describe("ensureLlamaServerInstalled", () => { + it("accepts only the pinned build and commit from the version line", async () => { + const command = await createInstalledServer(); + mockVersionOutput( + `version: 0.1.0-dev (build ${LLAMA_SERVER_BUILD}, commit ${LLAMA_SERVER_COMMIT.slice(0, 9)})\nbuilt with test compiler`, + ); + + await expect(ensureLlamaServerInstalled()).resolves.toMatchObject({ command }); + }); + + it("rejects a different active build even when output mentions the pinned build later", async () => { + await createInstalledServer(); + mockVersionOutput( + `version: 0.1.0-dev (build ${LLAMA_SERVER_BUILD + 1}, commit deadbeef0)\ncompatibility note: (build ${LLAMA_SERVER_BUILD}, commit ${LLAMA_SERVER_COMMIT.slice(0, 9)})`, + ); + + await expect(ensureLlamaServerInstalled()).rejects.toThrow( + `expected b${LLAMA_SERVER_BUILD} (${LLAMA_SERVER_COMMIT.slice(0, 9)})`, + ); + }); +}); diff --git a/extensions/llama-cpp/src/llama-server-install.ts b/extensions/llama-cpp/src/llama-server-install.ts index b033e031bb93..56d0825514ff 100644 --- a/extensions/llama-cpp/src/llama-server-install.ts +++ b/extensions/llama-cpp/src/llama-server-install.ts @@ -249,10 +249,11 @@ async function validateInstalledServer(command: string): Promise { } catch (error) { throw formatRuntimeDependencyError(error); } - if ( - !version.includes(`version: ${LLAMA_SERVER_BUILD}`) || - !version.includes(LLAMA_SERVER_COMMIT.slice(0, 9)) - ) { + const versionLine = version.split(/\r?\n/u, 1)[0]?.trim() ?? ""; + const match = versionLine.match(/^version: .+ \(build (\d+), commit ([a-f\d]{9})\)$/u); + const build = match?.[1] ? Number(match[1]) : undefined; + const commit = match?.[2]; + if (build !== LLAMA_SERVER_BUILD || commit !== LLAMA_SERVER_COMMIT.slice(0, 9)) { throw new Error( `Unexpected llama-server build at ${command}: expected ${LLAMA_SERVER_RELEASE} (${LLAMA_SERVER_COMMIT.slice(0, 9)}), got ${version || "no version output"}`, ); diff --git a/extensions/llama-cpp/src/managed-server.test.ts b/extensions/llama-cpp/src/managed-server.test.ts index c686fb6f9bee..efea084c3da1 100644 --- a/extensions/llama-cpp/src/managed-server.test.ts +++ b/extensions/llama-cpp/src/managed-server.test.ts @@ -38,21 +38,67 @@ afterEach(async () => { describe("managed llama-server", () => { it.each([ - ["darwin", "arm64", "metal", "tar.gz"], - ["darwin", "x64", "cpu", "tar.gz"], - ["linux", "arm64", "cpu", "tar.gz"], - ["linux", "x64", "cpu", "tar.gz"], - ["win32", "arm64", "cpu", "zip"], - ["win32", "x64", "cpu", "zip"], - ] as const)("selects the pinned %s/%s asset", (platform, arch, backend, archive) => { - expect(selectLlamaServerAsset(platform, arch)).toMatchObject({ - platform, - arch, - backend, - archive, - sha256: expect.stringMatching(/^[a-f\d]{64}$/u), - }); - }); + [ + "darwin", + "arm64", + "metal", + "tar.gz", + "llama-b10453-bin-macos-arm64.tar.gz", + "f1531b1c520f8b473d83352c5eec2f4f43bd0a54f9ca1366a6f202211cfbc098", + ], + [ + "darwin", + "x64", + "cpu", + "tar.gz", + "llama-b10453-bin-macos-x64.tar.gz", + "ac13f6f6c90c193765921bf52dd5ecf2a9d506ee9c3eadd2d6fd49ca7a5de25d", + ], + [ + "linux", + "arm64", + "cpu", + "tar.gz", + "llama-b10453-bin-ubuntu-arm64.tar.gz", + "b164e72dfb69c711275178e0d0fae54748042f039e4fe7386f1c0ea7019c109c", + ], + [ + "linux", + "x64", + "cpu", + "tar.gz", + "llama-b10453-bin-ubuntu-x64.tar.gz", + "550eb155a09c3051c7add5becf6d0badc3a4c33416807985963036b27b859fb4", + ], + [ + "win32", + "arm64", + "cpu", + "zip", + "llama-b10453-bin-win-cpu-arm64.zip", + "a8b984d478700777d4671cf33eccfddae42c1fd871e78efd43fee090131eec1f", + ], + [ + "win32", + "x64", + "cpu", + "zip", + "llama-b10453-bin-win-cpu-x64.zip", + "70c07211d0027305f0be09cd755d79641ebb0bb646590ff3d498c66b22df29b0", + ], + ] as const)( + "selects the pinned %s/%s asset", + (platform, arch, backend, archive, name, sha256) => { + expect(selectLlamaServerAsset(platform, arch)).toMatchObject({ + platform, + arch, + backend, + archive, + name, + sha256, + }); + }, + ); it("fails unsupported platforms with an actionable manual path", () => { expect(() => selectLlamaServerAsset("freebsd", "x64")).toThrow( diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json index 809f377602d9..dabb9e8be5d2 100644 --- a/extensions/llm-task/package.json +++ b/extensions/llm-task/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw JSON-only LLM task plugin", "type": "module", "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json index 3f1b7d031d01..b9ba36e91c10 100644 --- a/extensions/lobster/package.json +++ b/extensions/lobster/package.json @@ -9,7 +9,7 @@ "type": "module", "dependencies": { "@clawdbot/lobster": "2026.6.11", - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json index ecda56d78216..c93bdcc9d581 100644 --- a/extensions/matrix/package.json +++ b/extensions/matrix/package.json @@ -8,13 +8,13 @@ }, "type": "module", "dependencies": { - "@matrix-org/matrix-sdk-crypto-nodejs": "0.6.1", - "@matrix-org/matrix-sdk-crypto-wasm": "18.4.0", + "@matrix-org/matrix-sdk-crypto-nodejs": "0.6.6", + "@matrix-org/matrix-sdk-crypto-wasm": "18.5.0", "fake-indexeddb": "6.2.5", - "markdown-it": "14.3.0", + "markdown-it": "15.0.0", "matrix-js-sdk": "41.9.0", "music-metadata": "11.14.0", - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/matrix/src/matrix/format-spoiler-ranges.ts b/extensions/matrix/src/matrix/format-spoiler-ranges.ts index d54ffbffa4b6..dc055fa964c2 100644 --- a/extensions/matrix/src/matrix/format-spoiler-ranges.ts +++ b/extensions/matrix/src/matrix/format-spoiler-ranges.ts @@ -1,10 +1,11 @@ // Matrix helper module resolves spoiler delimiters in ordinary Markdown inline blocks. -import MarkdownIt from "markdown-it"; +import MarkdownIt, { type Env } from "markdown-it"; import { findCodeRegions, isInsideCode, tokenizeHtmlTags } from "openclaw/plugin-sdk/text-chunking"; import { isMarkdownEscaped, projectMatrixMarkdown } from "./format-profile.js"; import { findMatrixTableSourceRanges } from "./format-table-ranges.js"; const spoilerParser = new MarkdownIt({ html: false, linkify: true, typographer: false }); +spoilerParser.linkify.set({ fuzzyLink: true }); function findInlineMetadataRanges( markdown: string, @@ -106,7 +107,7 @@ function findInlineMetadataRanges( export function findMatrixMarkdownMetadataRanges( markdown: string, ): Array<{ start: number; end: number }> { - const env: { references?: Record } = {}; + const env: Env = {}; const tokens = spoilerParser.parse(markdown, env); const references = new Set(Object.keys(env.references ?? {})); const lineStarts = [0]; diff --git a/extensions/matrix/src/matrix/format.ts b/extensions/matrix/src/matrix/format.ts index 79aafff3e461..58b25611eff1 100644 --- a/extensions/matrix/src/matrix/format.ts +++ b/extensions/matrix/src/matrix/format.ts @@ -35,6 +35,7 @@ const md = new MarkdownIt({ typographer: false, }); +md.linkify.set({ fuzzyLink: true }); md.enable("strikethrough"); const { escapeHtml } = md.utils; @@ -113,7 +114,7 @@ function shouldSuppressAutoLink( if (token?.type !== "link_open" || token.info !== "auto") { return false; } - const href = token.attrGet("href") ?? ""; + const href = String(token.attrGet("href") ?? ""); const label = tokens[idx + 1]?.type === "text" ? (tokens[idx + 1]?.content ?? "") : ""; return Boolean(href && label && isAutoLinkedFileRef(href, label)); } diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json index c63adb36e855..c0bc55948b1e 100644 --- a/extensions/mattermost/package.json +++ b/extensions/mattermost/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "ws": "8.21.1", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/memory-core/package.json b/extensions/memory-core/package.json index da03cf763328..70273ad69be1 100644 --- a/extensions/memory-core/package.json +++ b/extensions/memory-core/package.json @@ -11,7 +11,7 @@ "chokidar": "5.0.0", "json5": "2.2.3", "p-limit": "7.3.1", - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json index 92a0dda28a0c..156562145c60 100644 --- a/extensions/memory-lancedb/package.json +++ b/extensions/memory-lancedb/package.json @@ -8,10 +8,10 @@ }, "type": "module", "dependencies": { - "@lancedb/lancedb": "0.31.0", + "@lancedb/lancedb": "0.37.1", "apache-arrow": "18.1.0", - "openai": "6.49.0", - "typebox": "1.3.6" + "openai": "7.4.0", + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/memory-wiki/package.json b/extensions/memory-wiki/package.json index 520321a049e0..c611e9b69f78 100644 --- a/extensions/memory-wiki/package.json +++ b/extensions/memory-wiki/package.json @@ -6,7 +6,7 @@ "type": "module", "dependencies": { "mdast-util-from-markdown": "2.0.3", - "typebox": "1.3.6", + "typebox": "1.3.14", "yaml": "2.9.0", "zod": "4.4.3" }, diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json index 0551a0ed2bc2..858241f68216 100644 --- a/extensions/msteams/package.json +++ b/extensions/msteams/package.json @@ -9,16 +9,16 @@ "type": "module", "dependencies": { "@azure/identity": "4.13.1", - "@microsoft/teams.api": "2.0.14", - "@microsoft/teams.apps": "2.0.14", + "@microsoft/teams.api": "2.0.15", + "@microsoft/teams.apps": "2.0.15", "express": "5.2.1", - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { - "@microsoft/teams.common": "2.0.14", + "@microsoft/teams.common": "2.0.15", "@openclaw/plugin-sdk": "workspace:*", - "jose": "6.2.4", + "jose": "6.2.9", "openclaw": "workspace:*" }, "peerDependencies": { diff --git a/extensions/msteams/src/sdk-proactive.ts b/extensions/msteams/src/sdk-proactive.ts index 86494c85233c..58035962517b 100644 --- a/extensions/msteams/src/sdk-proactive.ts +++ b/extensions/msteams/src/sdk-proactive.ts @@ -1,4 +1,4 @@ -import type { IMessageActivityInput } from "@microsoft/teams.api/dist/activities/message/message.js"; +import type { IMessageActivityInput } from "@microsoft/teams.api"; import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime"; // Msteams plugin module implements sdk proactive behavior. import { normalizeBotFrameworkServiceUrl } from "./bot-framework-service-url.js"; @@ -64,15 +64,7 @@ type MSTeamsProactiveOptions = { serviceUrlBoundary?: MSTeamsSdkCloudOptions; }; -const loadMSTeamsApiModule = createLazyRuntimeModule( - () => - // SAFETY: the 2.0.14 CJS root exports MessageActivityInput, while its declarations omit it. - import("@microsoft/teams.api") as unknown as Promise< - typeof import("@microsoft/teams.api") & { - MessageActivityInput: typeof import("@microsoft/teams.api/dist/activities/message/message.js").MessageActivityInput; - } - >, -); +const loadMSTeamsApiModule = createLazyRuntimeModule(() => import("@microsoft/teams.api")); async function quoteMSTeamsActivity( activity: MSTeamsActivityLike, diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json index 0b0a5778f765..bf359b5b520f 100644 --- a/extensions/nostr/package.json +++ b/extensions/nostr/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "nostr-tools": "2.24.1", + "nostr-tools": "2.24.2", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/oc-path/package.json b/extensions/oc-path/package.json index 4e066d76a9e8..cad3afe42be2 100644 --- a/extensions/oc-path/package.json +++ b/extensions/oc-path/package.json @@ -6,7 +6,7 @@ "type": "module", "dependencies": { "jsonc-parser": "3.3.1", - "markdown-it": "14.3.0", + "markdown-it": "15.0.0", "yaml": "2.9.0" }, "devDependencies": { diff --git a/extensions/oc-path/src/oc-path/parse.ts b/extensions/oc-path/src/oc-path/parse.ts index 5cbbaa79b2fd..7451d9e4ca77 100644 --- a/extensions/oc-path/src/oc-path/parse.ts +++ b/extensions/oc-path/src/oc-path/parse.ts @@ -11,12 +11,12 @@ * @module @openclaw/oc-path/parse */ -import MarkdownIt from "markdown-it"; +import MarkdownIt, { type MarkdownIt as MarkdownItParser } from "markdown-it"; import { expectDefined } from "openclaw/plugin-sdk/expect-runtime"; import type { AstBlock, AstItem, Diagnostic, FrontmatterEntry, ParseResult } from "./ast.js"; import { slugify } from "./slug.js"; -type Token = ReturnType[number]; +type Token = ReturnType[number]; const FENCE = "---"; const BOM = ""; diff --git a/extensions/ollama/package.json b/extensions/ollama/package.json index 8c84b99b2b95..1976b7a54208 100644 --- a/extensions/ollama/package.json +++ b/extensions/ollama/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Ollama provider plugin", "type": "module", "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/onepassword/package.json b/extensions/onepassword/package.json index 0247c6bc565c..615d465575bd 100644 --- a/extensions/onepassword/package.json +++ b/extensions/onepassword/package.json @@ -5,7 +5,7 @@ "description": "1Password SecretRef resolver and audited agent secrets broker for OpenClaw", "type": "module", "dependencies": { - "@openclaw/fs-safe": "0.5.5" + "@openclaw/fs-safe": "0.5.6" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/openai/package.json b/extensions/openai/package.json index 346d1b255372..111b8028f6ae 100644 --- a/extensions/openai/package.json +++ b/extensions/openai/package.json @@ -6,8 +6,8 @@ "type": "module", "dependencies": { "libopus-wasm": "0.2.0", - "werift": "0.24.1", - "ws": "8.21.1", + "werift": "0.24.4", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/qa-channel/package.json b/extensions/qa-channel/package.json index 48f98cd1a0ff..bcd5f78c1aa8 100644 --- a/extensions/qa-channel/package.json +++ b/extensions/qa-channel/package.json @@ -11,7 +11,7 @@ "./test-api.js": "./test-api.ts" }, "dependencies": { - "typebox": "1.3.6", + "typebox": "1.3.14", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/qa-lab/package.json b/extensions/qa-lab/package.json index 4e645e91b450..419ef57e5c2d 100644 --- a/extensions/qa-lab/package.json +++ b/extensions/qa-lab/package.json @@ -5,12 +5,12 @@ "description": "OpenClaw QA lab plugin with private debugger UI and scenario runner", "type": "module", "dependencies": { - "@copilotkit/aimock": "1.37.4", + "@copilotkit/aimock": "1.38.0", "@modelcontextprotocol/sdk": "1.30.0", - "@openclaw/crabline": "0.1.11", + "@openclaw/crabline": "0.1.17", "playwright-core": "1.62.1", "semver": "7.8.5", - "ws": "8.21.1", + "ws": "8.21.3", "yaml": "2.9.0", "zod": "4.4.3" }, @@ -21,7 +21,7 @@ "@openclaw/slack": "workspace:*", "@openclaw/whatsapp": "workspace:*", "openclaw": "workspace:*", - "vite": "8.1.5" + "vite": "8.2.1" }, "peerDependencies": { "openclaw": ">=2026.8.1" diff --git a/extensions/qa-lab/src/cli.runtime.test.ts b/extensions/qa-lab/src/cli.runtime.test.ts index 4e8cbc7c7645..b019b1cbbcb3 100644 --- a/extensions/qa-lab/src/cli.runtime.test.ts +++ b/extensions/qa-lab/src/cli.runtime.test.ts @@ -1298,11 +1298,10 @@ describe("qa cli runtime", () => { transportId: "qa-channel", channelDriver: "crabline", channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - providerReadinessArtifactPath: "crabline-fake-provider-smoke.json", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, evidenceMode: undefined, providerMode: "mock-openai", @@ -1377,11 +1376,10 @@ describe("qa cli runtime", () => { expect(runQaMultipass).toHaveBeenCalledWith( expect.objectContaining({ channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - providerReadinessArtifactPath: "crabline-fake-provider-smoke.json", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, }), ); diff --git a/extensions/qa-lab/src/crabline-artifacts.ts b/extensions/qa-lab/src/crabline-artifacts.ts index d06d8a4d31bc..83c4d4e3f44a 100644 --- a/extensions/qa-lab/src/crabline-artifacts.ts +++ b/extensions/qa-lab/src/crabline-artifacts.ts @@ -13,7 +13,7 @@ export type QaSuiteChannelDriverSelection = Omit< > & QaCrablineChannelDriverArtifactPaths; -export function hasQaCrablineArtifactPath(value: unknown): value is string { +function hasQaCrablineArtifactPath(value: unknown): value is string { return typeof value === "string" && value.trim().length > 0; } @@ -25,24 +25,20 @@ export function resolveQaCrablineChannelDriverArtifactPaths(params: { result?: { capabilityMatrixPath?: unknown; providerReadinessArtifactPath?: unknown; - smokeArtifactPath?: unknown; }; selection?: OpenClawCrablineChannelDriverSelection | null; }): QaCrablineChannelDriverArtifactPaths | undefined { if (!params.selection) { return undefined; } - const smokeArtifactPath = readArtifactPath(params.result?.smokeArtifactPath); + const providerReadinessArtifactPath = + readArtifactPath(params.result?.providerReadinessArtifactPath) ?? + params.selection.providerReadinessArtifactPath; return { capabilityMatrixPath: readArtifactPath(params.result?.capabilityMatrixPath) ?? params.selection.capabilityMatrixPath, - providerReadinessArtifactPath: - readArtifactPath(params.result?.providerReadinessArtifactPath) ?? - // Legacy results expose the completed readiness generation through smokeArtifactPath. - smokeArtifactPath ?? - params.selection.providerReadinessArtifactPath ?? - params.selection.smokeArtifactPath, - smokeArtifactPath: smokeArtifactPath ?? params.selection.smokeArtifactPath, + providerReadinessArtifactPath, + smokeArtifactPath: providerReadinessArtifactPath, }; } diff --git a/extensions/qa-lab/src/crabline-provider-targets.ts b/extensions/qa-lab/src/crabline-provider-targets.ts index 0dea0774f66a..8532bb2107c7 100644 --- a/extensions/qa-lab/src/crabline-provider-targets.ts +++ b/extensions/qa-lab/src/crabline-provider-targets.ts @@ -3,6 +3,7 @@ import type { OpenClawCrablineInbound, OpenClawCrablineInboundInput, StartedOpenClawCrablineAdapter, + StartedOpenClawCrablineCorrelatedAdapter, } from "@openclaw/crabline"; import type { QaBusInboundMessageInput } from "./runtime-api.js"; @@ -142,15 +143,11 @@ export function resolveCrablineStateConversation(params: { } export function createCrablineProviderDelivery( - adapter: StartedOpenClawCrablineAdapter, + adapter: StartedOpenClawCrablineCorrelatedAdapter, target: string, ) { - const delivery = adapter.createAgentDelivery({ + const { providerTargetKey, ...delivery } = adapter.createAgentDelivery({ target: adapter.channel === "matrix" ? resolveMatrixQaTarget(target) : target, }); - return { - delivery, - providerTargetKey: - adapter.channel === "matrix" ? delivery.to.replace(/^room:/u, "") : delivery.to, - }; + return { delivery, providerTargetKey }; } diff --git a/extensions/qa-lab/src/crabline-transport-message-id.test.ts b/extensions/qa-lab/src/crabline-transport-message-id.test.ts index 8f59f90aa293..d03cd1e9013b 100644 --- a/extensions/qa-lab/src/crabline-transport-message-id.test.ts +++ b/extensions/qa-lab/src/crabline-transport-message-id.test.ts @@ -20,7 +20,7 @@ const PROVIDER_CASES = [ channel: "matrix", conversation: { id: "main", kind: "group" }, senderId: "driver", - nativeMessageId: /^\$[a-f0-9]{16}:matrix\.test$/u, + nativeMessageId: /^\$[A-Za-z0-9_-]{43}$/u, }, ] as const; @@ -33,10 +33,10 @@ describe("Crabline provider-native inbound message identity", () => { const transport = await createQaCrablineTransportAdapter({ outputDir, selection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel, channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, state: busState, }); @@ -84,10 +84,10 @@ describe("Crabline provider-native inbound message identity", () => { await createQaCrablineTransportAdapter({ outputDir: `${outputDir}/${name}`, selection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, state: busState, }); diff --git a/extensions/qa-lab/src/crabline-transport-native-command.test.ts b/extensions/qa-lab/src/crabline-transport-native-command.test.ts index 36d246baac45..d0d775075d3a 100644 --- a/extensions/qa-lab/src/crabline-transport-native-command.test.ts +++ b/extensions/qa-lab/src/crabline-transport-native-command.test.ts @@ -15,10 +15,10 @@ describe("Crabline Telegram native command arguments", () => { const transport = await createQaCrablineTransportAdapter({ outputDir, selection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, state: createQaBusState(), }); diff --git a/extensions/qa-lab/src/crabline-transport-readiness.test.ts b/extensions/qa-lab/src/crabline-transport-readiness.test.ts index f3c455e77755..036e6f8d40d0 100644 --- a/extensions/qa-lab/src/crabline-transport-readiness.test.ts +++ b/extensions/qa-lab/src/crabline-transport-readiness.test.ts @@ -10,10 +10,10 @@ async function withTelegramCrablineTransport( const transport = await createQaCrablineTransportAdapter({ outputDir, selection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, state: createQaBusState(), }); diff --git a/extensions/qa-lab/src/crabline-transport.test.ts b/extensions/qa-lab/src/crabline-transport.test.ts index ee2e152f6f45..8e87b3776cbd 100644 --- a/extensions/qa-lab/src/crabline-transport.test.ts +++ b/extensions/qa-lab/src/crabline-transport.test.ts @@ -14,10 +14,10 @@ afterEach(() => { function createSelection(channel: OpenClawCrablineChannelDriverSelection["channel"] = "telegram") { return { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel, channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", } as const; } @@ -247,6 +247,12 @@ describe("crabline transport", () => { | undefined; const apiRoot = requireString(telegram?.apiRoot, "Telegram API root"); const botToken = requireString(telegram?.botToken, "Telegram bot token"); + await transport.sendInbound({ + conversation: { id: "-1001234567890", kind: "group" }, + senderId: "100001", + text: "forum topic seed", + threadId: "42", + }); const postTelegram = async (method: string, body: Record) => { const response = await fetch(`${apiRoot}/bot${botToken}/${method}`, { body: JSON.stringify(body), @@ -654,6 +660,7 @@ describe("crabline transport", () => { senderName: "Alice", text: "Mattermost baseline marker check.", }); + await transport.state.reset(); const delivery = transport.buildAgentDelivery({ target: "group:qa-channel" }); const env = transport.createRuntimeEnvPatch?.() ?? {}; const mattermostUrl = requireString(env.MATTERMOST_URL, "Mattermost URL"); @@ -773,7 +780,7 @@ describe("crabline transport", () => { ).resolves.toMatchObject({ conversation: { id: roomId, kind: "group" }, direction: "inbound", - id: expect.stringMatching(/^\$[a-f0-9]{16}:matrix\.test$/u), + id: expect.stringMatching(/^\$[A-Za-z0-9_-]{43}$/u), senderId: "driver", text: "Matrix baseline marker check.", }); @@ -942,7 +949,9 @@ describe("crabline transport", () => { url: `${telegram?.apiRoot}/bot${telegram?.botToken}/sendMessage`, init: { body: JSON.stringify({ - chat_id: inbound.conversation.id, + chat_id: transport.buildAgentDelivery({ + target: `channel:${inbound.conversation.id}`, + }).to, text: "assistant via fake telegram", }), headers: { "content-type": "application/json" }, diff --git a/extensions/qa-lab/src/crabline-transport.ts b/extensions/qa-lab/src/crabline-transport.ts index 04eeccb1f589..60b3a0a7bcde 100644 --- a/extensions/qa-lab/src/crabline-transport.ts +++ b/extensions/qa-lab/src/crabline-transport.ts @@ -6,6 +6,7 @@ import { type OpenClawCrablineChannelDriverSelection, type OpenClawCrablineInbound, type StartedOpenClawCrablineAdapter, + type StartedOpenClawCrablineCorrelatedAdapter, } from "@openclaw/crabline"; import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts"; import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime"; @@ -299,7 +300,7 @@ function createCrablineState(params: { } class QaCrablineTransport extends QaStateBackedTransportAdapter { - readonly #adapter: StartedOpenClawCrablineAdapter; + readonly #adapter: StartedOpenClawCrablineCorrelatedAdapter; readonly #selection: OpenClawCrablineChannelDriverSelection; readonly #transportPolicy?: QaTransportPolicy; readonly #state: QaCrablineTransportState; @@ -310,7 +311,7 @@ class QaCrablineTransport extends QaStateBackedTransportAdapter { }>; constructor(params: { - adapter: StartedOpenClawCrablineAdapter; + adapter: StartedOpenClawCrablineCorrelatedAdapter; transportPolicy?: QaTransportPolicy; selection: OpenClawCrablineChannelDriverSelection; state: QaCrablineTransportState; @@ -395,7 +396,7 @@ class QaCrablineTransport extends QaStateBackedTransportAdapter { return delivery; }; - createRuntimeEnvPatch = () => this.#adapter.createChannelDriverSmokeEnv({}); + createRuntimeEnvPatch = () => this.#adapter.createProviderReadinessEnv({}); handleAction = async (_params: { action: QaTransportActionName; diff --git a/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime-internals.ts b/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime-internals.ts index 520f4216ad1d..f5f64d5e5737 100644 --- a/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime-internals.ts +++ b/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime-internals.ts @@ -4,7 +4,7 @@ import path from "node:path"; import type { FetchLike } from "../../../docker-runtime.js"; const MATRIX_QA_DEFAULT_IMAGE = - "ghcr.io/matrix-construct/tuwunel:v1.8.2@sha256:6f950bb139411a7964781e986321e395e045e4a6a52240a4dda9d23d04075f78"; + "ghcr.io/matrix-construct/tuwunel:v1.8.3@sha256:699fa9971c174e01c884abad8d1a3cfb2fe518e1a71f1fa16ea9dedf11873d74"; const MATRIX_QA_DEFAULT_SERVER_NAME = "matrix-qa.test"; export const MATRIX_QA_INTERNAL_PORT = 8008; export const MATRIX_QA_SERVICE = "matrix-qa-homeserver"; diff --git a/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime.test.ts b/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime.test.ts index e7bb60347203..c3e6d2c6b764 100644 --- a/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime.test.ts +++ b/extensions/qa-lab/src/live-transports/matrix/substrate/harness.runtime.test.ts @@ -124,7 +124,7 @@ describe("matrix harness runtime", () => { const compose = await readFile(result.composeFile, "utf8"); expect(compose).toContain( - "image: ghcr.io/matrix-construct/tuwunel:v1.8.2@sha256:6f950bb139411a7964781e986321e395e045e4a6a52240a4dda9d23d04075f78", + "image: ghcr.io/matrix-construct/tuwunel:v1.8.3@sha256:699fa9971c174e01c884abad8d1a3cfb2fe518e1a71f1fa16ea9dedf11873d74", ); expect(compose).toContain(' - "127.0.0.1:28008:8008"'); expect(compose).toContain('TUWUNEL_ALLOW_ENCRYPTION: "true"'); diff --git a/extensions/qa-lab/src/multipass.runtime.test.ts b/extensions/qa-lab/src/multipass.runtime.test.ts index 6f9d03be71a2..1aeb1b77012a 100644 --- a/extensions/qa-lab/src/multipass.runtime.test.ts +++ b/extensions/qa-lab/src/multipass.runtime.test.ts @@ -191,10 +191,10 @@ describe("qa multipass runtime", () => { outputDirName: "multipass-selection-test", runtimePair: ["openclaw", "codex"], channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, enabledPluginIds: ["browser", "memory-core", "browser"], }); diff --git a/extensions/qa-lab/src/suite-artifacts.ts b/extensions/qa-lab/src/suite-artifacts.ts index 304e27dd4fda..1f0aec8f2c7d 100644 --- a/extensions/qa-lab/src/suite-artifacts.ts +++ b/extensions/qa-lab/src/suite-artifacts.ts @@ -4,7 +4,6 @@ import type { OpenClawCrablineChannelDriverSelection } from "@openclaw/crabline" import { replaceFileAtomic } from "openclaw/plugin-sdk/security-runtime"; import { assertQaSuiteArtifactWritten } from "./artifact-assertion.js"; import { - hasQaCrablineArtifactPath, resolveQaCrablineChannelDriverArtifactPaths, type QaSuiteChannelDriverSelection, } from "./crabline-artifacts.js"; @@ -21,11 +20,6 @@ import { countQaSuiteFailedScenarios, type QaSuiteSummaryJson } from "./suite-su import { createQaSuiteReportNotes } from "./suite-support.js"; import type { QaSuiteScenarioResult } from "./suite-types.js"; -type QaCrablineRuntime = typeof import("@openclaw/crabline"); -type QaCrablineChannelDriverSmokeResult = Awaited< - ReturnType ->; - /** Atomically replaces each file in order; summary-last is a completion signal, not a set transaction. */ export async function publishQaSuiteArtifactFiles(params: { outputDir: string; @@ -165,9 +159,6 @@ export async function writeQaSuiteArtifacts(params: { scenarioIds?: readonly string[]; runtimePair?: [RuntimeId, RuntimeId]; writeEvidenceFile?: boolean; - runCrablineChannelDriverSmoke?: ( - params: Parameters[0], - ) => Promise; }) { const reportPath = path.join(params.outputDir, "qa-suite-report.md"); const summaryPath = path.join(params.outputDir, "qa-suite-summary.json"); @@ -178,21 +169,15 @@ export async function writeQaSuiteArtifacts(params: { const crablineRuntime = crablineChannelDriverSelection ? await import("@openclaw/crabline") : undefined; - let crablineChannelDriverSmoke: QaCrablineChannelDriverSmokeResult | undefined; - if (crablineChannelDriverSelection) { - const runCrablineChannelDriverSmoke = - params.runCrablineChannelDriverSmoke ?? - crablineRuntime?.runOpenClawCrablineChannelDriverSmoke; - if (!runCrablineChannelDriverSmoke) { - throw new Error("Crabline runtime did not provide its channel-driver smoke helper."); - } - crablineChannelDriverSmoke = await runCrablineChannelDriverSmoke({ - outputDir: params.outputDir, - selection: crablineChannelDriverSelection, - }); - } + const crablineProviderReadiness = + crablineRuntime && crablineChannelDriverSelection + ? await crablineRuntime.runOpenClawCrablineProviderReadiness({ + outputDir: params.outputDir, + selection: crablineChannelDriverSelection, + }) + : undefined; const crablineChannelDriverArtifactPaths = resolveQaCrablineChannelDriverArtifactPaths({ - result: crablineChannelDriverSmoke, + result: crablineProviderReadiness, selection: crablineChannelDriverSelection, }); const effectiveChannelDriverSelection: QaSuiteChannelDriverSelection | null | undefined = @@ -201,7 +186,7 @@ export async function writeQaSuiteArtifacts(params: { ...crablineChannelDriverSelection, ...crablineChannelDriverArtifactPaths, } - : crablineChannelDriverSelection; + : undefined; const report = renderQaMarkdownReport({ title: "OpenClaw QA Scenario Suite", inProgress: params.status === "running", @@ -252,50 +237,6 @@ export async function writeQaSuiteArtifacts(params: { scenarioResults: params.scenarios, }) : undefined; - if ( - crablineChannelDriverSelection && - crablineChannelDriverSmoke && - !hasQaCrablineArtifactPath(crablineChannelDriverSmoke.capabilityMatrixPath) - ) { - await fs.writeFile( - path.join(params.outputDir, crablineChannelDriverSelection.capabilityMatrixPath), - `${JSON.stringify( - { - version: 1, - source: "openclaw/crabline", - channelDriver: crablineChannelDriverSelection.channelDriver, - selectedChannel: crablineChannelDriverSelection.channel, - manifestPath: crablineChannelDriverSmoke.manifestPath, - report: crablineChannelDriverSmoke.capabilityReport, - }, - null, - 2, - )}\n`, - "utf8", - ); - } - if ( - crablineChannelDriverSelection && - crablineChannelDriverSmoke && - !hasQaCrablineArtifactPath(crablineChannelDriverSmoke.smokeArtifactPath) - ) { - await fs.writeFile( - path.join(params.outputDir, crablineChannelDriverSelection.smokeArtifactPath), - `${JSON.stringify( - { - version: 1, - source: "openclaw/crabline", - channelDriver: crablineChannelDriverSelection.channelDriver, - selectedChannel: crablineChannelDriverSelection.channel, - manifestPath: crablineChannelDriverSmoke.manifestPath, - smoke: crablineChannelDriverSmoke.smoke, - }, - null, - 2, - )}\n`, - "utf8", - ); - } const writeEvidenceFile = params.status !== "running" && (params.writeEvidenceFile ?? true); if (!writeEvidenceFile) { await fs.rm(evidencePath, { force: true }); diff --git a/extensions/qa-lab/src/suite-launch.runtime.test.ts b/extensions/qa-lab/src/suite-launch.runtime.test.ts index 890520d22a91..896834785814 100644 --- a/extensions/qa-lab/src/suite-launch.runtime.test.ts +++ b/extensions/qa-lab/src/suite-launch.runtime.test.ts @@ -1458,10 +1458,10 @@ describe("qa suite runtime launcher", () => { repoRoot, outputDir: ".artifacts/qa-e2e/crabline-serial", channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, scenarioIds: ["telegram-help-command", "dm-chat-baseline", "control-ui-chat-flow-playwright"], }); @@ -1521,10 +1521,10 @@ describe("qa suite runtime launcher", () => { repoRoot, outputDir: ".artifacts/qa-e2e/crabline-isolated", channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, concurrency: 8, scenarioIds: [ diff --git a/extensions/qa-lab/src/suite.test.ts b/extensions/qa-lab/src/suite.test.ts index e7d1645bd526..909aa0e2db59 100644 --- a/extensions/qa-lab/src/suite.test.ts +++ b/extensions/qa-lab/src/suite.test.ts @@ -461,10 +461,10 @@ describe("qa suite", () => { concurrency: 1, transportId: "qa-channel", channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, }), ).toBe( @@ -710,10 +710,10 @@ describe("qa suite", () => { channel: "telegram", channelDriver: "crabline", channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", + capabilityMatrixPath: "crabline-channel-driver-capabilities.json", channel: "telegram", channelDriver: "crabline", - smokeArtifactPath: "crabline-fake-provider-smoke.json", + providerReadinessArtifactPath: "crabline-provider-readiness.json", }, }); @@ -729,11 +729,17 @@ describe("qa suite", () => { throw new Error("Crabline generation artifact paths missing from QA summary."); } const artifactGenerationDirectory = path.dirname(capabilityMatrixPath); - expect(path.dirname(artifactGenerationDirectory)).toBe(".crabline-smoke-artifacts"); + expect(path.dirname(artifactGenerationDirectory)).toBe(".crabline-channel-driver-artifacts"); expect(path.basename(artifactGenerationDirectory)).toMatch(/^generation-[^/\\]+$/u); - expect(path.basename(capabilityMatrixPath)).toBe("crabline-fake-provider-capabilities.json"); + expect(path.basename(capabilityMatrixPath)).toBe("crabline-channel-driver-capabilities.json"); expect(path.dirname(smokeArtifactPath)).toBe(artifactGenerationDirectory); - expect(path.basename(smokeArtifactPath)).toBe("crabline-fake-provider-smoke.json"); + expect(path.basename(smokeArtifactPath)).toBe("crabline-provider-readiness.json"); + await expect( + fs.access(path.join(outputDir, "crabline-channel-driver-capabilities.json")), + ).rejects.toMatchObject({ code: "ENOENT" }); + await expect( + fs.access(path.join(outputDir, "crabline-provider-readiness.json")), + ).rejects.toMatchObject({ code: "ENOENT" }); const matrix = JSON.parse( await fs.readFile(path.resolve(outputDir, capabilityMatrixPath), "utf8"), ) as { @@ -745,14 +751,23 @@ describe("qa suite", () => { ); const smoke = JSON.parse( await fs.readFile(path.resolve(outputDir, smokeArtifactPath), "utf8"), - ) as { smoke?: { result?: { ok?: boolean; provider?: string } } }; - expect(smoke.smoke?.result).toMatchObject({ ok: true, provider: "telegram" }); + ) as { providerReadiness?: { result?: { ok?: boolean; provider?: string } } }; + expect(smoke.providerReadiness?.result).toMatchObject({ ok: true, provider: "telegram" }); const evidence = JSON.parse(await fs.readFile(artifacts.evidencePath, "utf8")) as { entries?: Array<{ - execution?: { channel?: { driver?: string; id?: string } }; + execution?: { + artifacts?: Array<{ kind?: string; path?: string }>; + channel?: { driver?: string; id?: string }; + }; result?: { failure?: { reason?: string }; status?: string }; }>; }; + expect(evidence.entries?.[0]?.execution?.artifacts).toEqual( + expect.arrayContaining([ + { kind: "channel-capability-matrix", path: capabilityMatrixPath, source: "qa-suite" }, + { kind: "channel-driver-smoke", path: smokeArtifactPath, source: "qa-suite" }, + ]), + ); expect(evidence.entries?.[0]?.execution?.channel).toMatchObject({ driver: "crabline", id: "telegram", @@ -766,119 +781,6 @@ describe("qa suite", () => { } }); - it("uses Crabline generation artifact paths without rewriting them", async () => { - const outputDir = await tempDirs.makeTempDir("qa-suite-crabline-generation-"); - const capabilityMatrixPath = path.join( - outputDir, - ".crabline-smoke-artifacts", - "generation-11111111-1111-4111-8111-111111111111", - "capabilities.json", - ); - const smokeArtifactPath = path.join( - outputDir, - ".crabline-smoke-artifacts", - "generation-11111111-1111-4111-8111-111111111111", - "smoke.json", - ); - const providerReadinessArtifactPath = path.join( - path.dirname(smokeArtifactPath), - "provider-readiness.json", - ); - await fs.mkdir(path.dirname(capabilityMatrixPath), { recursive: true }); - await fs.writeFile(capabilityMatrixPath, "authoritative capabilities\n", "utf8"); - await fs.writeFile(smokeArtifactPath, "authoritative smoke\n", "utf8"); - await fs.writeFile(providerReadinessArtifactPath, "authoritative provider readiness\n", "utf8"); - - const artifacts = await writeQaSuiteArtifacts({ - outputDir, - startedAt: new Date("2026-07-12T00:00:00.000Z"), - finishedAt: new Date("2026-07-12T00:01:00.000Z"), - scenarios: [{ name: "Telegram DM", status: "pass", steps: [] }], - scenarioDefinitions: [ - { - ...makeQaSuiteTestScenario("telegram-dm", { - surface: "channel", - }), - coverage: { - primary: ["channels.dm"], - }, - }, - ], - transport: { - id: "qa-channel", - createReportNotes: () => [], - } as unknown as QaTransportAdapter, - providerMode: "mock-openai", - primaryModel: "mock-openai/gpt-5.6-luna", - alternateModel: "mock-openai/gpt-5.6-luna-alt", - fastMode: true, - concurrency: 1, - channelDriverSelection: { - capabilityMatrixPath: "crabline-fake-provider-capabilities.json", - channel: "telegram", - channelDriver: "crabline", - providerReadinessArtifactPath: "crabline-fake-provider-smoke.json", - smokeArtifactPath: "crabline-fake-provider-smoke.json", - }, - runCrablineChannelDriverSmoke: vi.fn(async () => ({ - artifactPointerPath: path.join(outputDir, ".crabline-smoke-artifacts", "current.json"), - capabilityMatrixPath, - capabilityReport: {}, - generation: "generation-11111111-1111-4111-8111-111111111111", - manifestPath: path.join( - outputDir, - ".crabline-smoke-artifacts", - "generation-11111111-1111-4111-8111-111111111111", - "manifest.json", - ), - providerReadiness: {}, - providerReadinessArtifactPath, - smoke: {}, - smokeArtifactPath, - })), - }); - - await expect(fs.readFile(capabilityMatrixPath, "utf8")).resolves.toBe( - "authoritative capabilities\n", - ); - await expect(fs.readFile(smokeArtifactPath, "utf8")).resolves.toBe("authoritative smoke\n"); - await expect(fs.readFile(providerReadinessArtifactPath, "utf8")).resolves.toBe( - "authoritative provider readiness\n", - ); - await expect( - fs.access(path.join(outputDir, "crabline-fake-provider-capabilities.json")), - ).rejects.toMatchObject({ code: "ENOENT" }); - await expect( - fs.access(path.join(outputDir, "crabline-fake-provider-smoke.json")), - ).rejects.toMatchObject({ code: "ENOENT" }); - - const evidence = JSON.parse(await fs.readFile(artifacts.evidencePath, "utf8")) as { - entries?: Array<{ execution?: { artifacts?: Array<{ kind?: string; path?: string }> } }>; - }; - expect(evidence.entries?.[0]?.execution?.artifacts).toEqual( - expect.arrayContaining([ - { kind: "channel-capability-matrix", path: capabilityMatrixPath, source: "qa-suite" }, - { kind: "channel-driver-smoke", path: smokeArtifactPath, source: "qa-suite" }, - ]), - ); - const summary = JSON.parse(await fs.readFile(artifacts.summaryPath, "utf8")) as { - run?: { - channelCapabilityMatrixPath?: string; - channelDriverSmokePath?: string; - }; - }; - expect(summary.run).toMatchObject({ - channelCapabilityMatrixPath: capabilityMatrixPath, - channelDriverSmokePath: smokeArtifactPath, - }); - expect(artifacts.report).toContain(`Generation capability filename: ${capabilityMatrixPath}.`); - expect(artifacts.report).toContain( - `Generation provider-readiness filename: ${providerReadinessArtifactPath}.`, - ); - expect(artifacts.report).not.toContain("crabline-fake-provider-capabilities.json"); - expect(artifacts.report).not.toContain("crabline-fake-provider-smoke.json"); - }); - it("arms gateway heap checkpoint env only when requested", () => { expect( buildQaGatewayHeapCheckpointRuntimeEnvPatch({ diff --git a/extensions/reef/package.json b/extensions/reef/package.json index c653c770f361..570ca65c8daf 100644 --- a/extensions/reef/package.json +++ b/extensions/reef/package.json @@ -4,10 +4,10 @@ "description": "OpenClaw Reef channel plugin — guarded end-to-end encrypted claw-to-claw messaging", "type": "module", "dependencies": { - "@noble/ciphers": "2.2.0", - "@noble/curves": "2.2.0", - "@noble/hashes": "2.2.0", - "ws": "8.21.1", + "@noble/ciphers": "2.3.0", + "@noble/curves": "2.3.0", + "@noble/hashes": "2.3.0", + "ws": "8.21.3", "zod": "4.4.3" }, "openclaw": { diff --git a/extensions/signal/package.json b/extensions/signal/package.json index 95b544cdd1b2..0608b65a22fe 100644 --- a/extensions/signal/package.json +++ b/extensions/signal/package.json @@ -4,7 +4,7 @@ "description": "OpenClaw Signal channel plugin", "type": "module", "dependencies": { - "ws": "8.21.1", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/slack/package.json b/extensions/slack/package.json index f8c165fecde9..f4aa774f3547 100644 --- a/extensions/slack/package.json +++ b/extensions/slack/package.json @@ -13,9 +13,9 @@ "@slack/types": "3.0.0", "@slack/web-api": "8.0.0", "get-east-asian-width": "1.6.0", - "typebox": "1.3.6", + "typebox": "1.3.14", "undici": "7.29.0", - "ws": "8.21.1", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/tavily/package.json b/extensions/tavily/package.json index dd8160c0f405..f030003e7845 100644 --- a/extensions/tavily/package.json +++ b/extensions/tavily/package.json @@ -4,7 +4,7 @@ "description": "OpenClaw Tavily plugin", "type": "module", "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/teams-meetings/package.json b/extensions/teams-meetings/package.json index a4b858ad5be2..f8fface53db7 100644 --- a/extensions/teams-meetings/package.json +++ b/extensions/teams-meetings/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json index 387c09b1c63b..8f764f0413a0 100644 --- a/extensions/telegram/package.json +++ b/extensions/telegram/package.json @@ -8,8 +8,8 @@ "@grammyjs/runner": "2.0.3", "@grammyjs/transformer-throttler": "1.2.1", "grammy": "1.45.1", - "typebox": "1.3.6", - "undici": "8.9.0", + "typebox": "1.3.14", + "undici": "8.10.0", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json index ba8cce76127e..62f929b49698 100644 --- a/extensions/tlon/package.json +++ b/extensions/tlon/package.json @@ -8,9 +8,9 @@ }, "type": "module", "dependencies": { - "@aws-sdk/client-s3": "3.1095.0", - "@aws-sdk/s3-request-presigner": "3.1095.0", - "@tloncorp/tlon-skill": "0.4.5", + "@aws-sdk/client-s3": "3.1111.0", + "@aws-sdk/s3-request-presigner": "3.1111.0", + "@tloncorp/tlon-skill": "0.5.0", "@urbit/aura": "3.0.0", "zod": "4.4.3" }, diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json index c694e03a115d..6999c29e4c80 100644 --- a/extensions/voice-call/package.json +++ b/extensions/voice-call/package.json @@ -8,8 +8,8 @@ }, "type": "module", "dependencies": { - "typebox": "1.3.6", - "ws": "8.21.1", + "typebox": "1.3.14", + "ws": "8.21.3", "zod": "4.4.3" }, "devDependencies": { diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json index 3a443ed765cf..c95aab4cc256 100644 --- a/extensions/whatsapp/package.json +++ b/extensions/whatsapp/package.json @@ -9,8 +9,8 @@ "type": "module", "dependencies": { "audio-decode": "2.2.3", - "baileys": "7.0.0-rc13", - "typebox": "1.3.6" + "baileys": "7.0.0-rc14", + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", diff --git a/extensions/workboard/package.json b/extensions/workboard/package.json index a704ad50ccb7..a4838b32a2ad 100644 --- a/extensions/workboard/package.json +++ b/extensions/workboard/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw dashboard workboard plugin", "type": "module", "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", diff --git a/extensions/xai/package.json b/extensions/xai/package.json index 03b9aa68efa2..ceef7fe06223 100644 --- a/extensions/xai/package.json +++ b/extensions/xai/package.json @@ -5,8 +5,8 @@ "description": "OpenClaw xAI plugin", "type": "module", "dependencies": { - "typebox": "1.3.6", - "ws": "8.21.1" + "typebox": "1.3.14", + "ws": "8.21.3" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json index 78aecfeb31ff..897c42d581f3 100644 --- a/extensions/zalouser/package.json +++ b/extensions/zalouser/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "typebox": "1.3.6", + "typebox": "1.3.14", "zca-js": "2.1.2", "zod": "4.4.3" }, diff --git a/extensions/zoom-meetings/package.json b/extensions/zoom-meetings/package.json index 48b2e4a40049..8c9049bfc81b 100644 --- a/extensions/zoom-meetings/package.json +++ b/extensions/zoom-meetings/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*", diff --git a/package.json b/package.json index 852c304bb350..d20a68594ef5 100644 --- a/package.json +++ b/package.json @@ -1587,8 +1587,8 @@ "crabbox:warmup": "node scripts/crabbox-wrapper.mjs warmup", "deadcode:dependencies": "pnpm deadcode:full", "deadcode:exports": "node --import tsx scripts/check-deadcode-exports.mts", - "deadcode:full": "pnpm --config.minimum-release-age=0 dlx --package knip@6.8.0 knip --config config/knip.config.ts --production --no-progress --reporter compact --no-config-hints --exclude duplicates && pnpm --config.minimum-release-age=0 dlx --package knip@6.8.0 knip --config config/knip.all-exports.config.ts --no-progress --reporter compact --no-config-hints --exports --exclude duplicates", - "deadcode:knip": "pnpm --config.minimum-release-age=0 dlx --package knip@6.8.0 knip --config config/knip.config.ts --production --no-progress --reporter compact --files --dependencies", + "deadcode:full": "pnpm --config.minimum-release-age=0 dlx --package knip@6.32.2 knip --config config/knip.config.ts --production --no-progress --reporter compact --no-config-hints --exclude duplicates && pnpm --config.minimum-release-age=0 dlx --package knip@6.32.2 knip --config config/knip.all-exports.config.ts --no-progress --reporter compact --no-config-hints --exports --exclude duplicates", + "deadcode:knip": "pnpm --config.minimum-release-age=0 dlx --package knip@6.32.2 knip --config config/knip.config.ts --production --no-progress --reporter compact --files --dependencies", "deadcode:report": "pnpm deadcode:full && pnpm deadcode:exports", "deadcode:unused-files": "node --import tsx scripts/check-deadcode-unused-files.mts", "deps:root-ownership": "node --import tsx scripts/root-dependency-ownership-audit.mts", @@ -2026,37 +2026,37 @@ }, "dependencies": { "@agentclientprotocol/sdk": "1.3.0", - "@anthropic-ai/sdk": "0.115.0", + "@anthropic-ai/sdk": "0.117.1", "@clack/core": "1.4.3", "@clack/prompts": "1.7.0", - "@earendil-works/pi-tui": "0.82.1", - "@google/genai": "2.13.0", + "@earendil-works/pi-tui": "0.84.2", + "@google/genai": "2.17.1", "@grammyjs/runner": "2.0.3", "@grammyjs/transformer-throttler": "1.2.1", - "@homebridge/ciao": "1.3.10", - "@lydell/node-pty": "1.2.0-beta.14", + "@homebridge/ciao": "1.3.12", + "@lydell/node-pty": "1.2.0-beta.15", "@mistralai/mistralai": "2.5.0", "@modelcontextprotocol/sdk": "1.30.0", "@mozilla/readability": "0.6.0", "@openclaw/ai": "workspace:*", - "@openclaw/fs-safe": "0.5.5", - "@openclaw/proxyline": "0.3.4", + "@openclaw/fs-safe": "0.5.6", + "@openclaw/proxyline": "0.3.7", "@silvia-odwyer/photon-node": "0.3.4", - "@trycua/cua-driver": "0.19.3", - "acorn": "8.17.0", + "@trycua/cua-driver": "0.20.0", + "acorn": "8.18.0", "chalk": "6.0.0", "chokidar": "5.0.0", - "clawpdf": "0.3.0", + "clawpdf": "0.3.1", "commander": "15.0.0", "croner": "10.0.1", "diff": "9.0.0", "dotenv": "17.4.2", "entities": "8.0.0", - "execa": "10.0.0", + "execa": "10.0.1", "express": "5.2.1", - "file-type": "22.0.1", + "file-type": "22.0.2", "grammy": "1.45.1", - "highlight.js": "11.11.1", + "highlight.js": "11.12.0", "hosted-git-info": "10.1.1", "iconv-lite": "0.7.3", "ignore": "7.0.6", @@ -2064,80 +2064,81 @@ "json5": "2.2.3", "jszip": "3.10.1", "koffi": "3.1.5", - "kysely": "0.29.4", + "kysely": "0.29.5", "linkedom": "0.18.13", - "minimatch": "10.2.5", + "minimatch": "10.2.6", "ms": "2.1.3", "node-edge-tts": "1.2.10", - "openai": "6.49.0", + "openai": "7.4.0", "p-limit": "7.3.1", "p-map": "7.0.6", "partial-json": "0.1.7", "playwright-core": "1.62.1", "pretty-ms": "9.3.0", "qrcode": "1.5.4", - "quickjs-wasi": "3.2.0", - "rastermill": "0.3.1", + "quickjs-wasi": "3.4.0", + "rastermill": "0.3.2", "semver": "7.8.5", "tar": "7.5.22", "tree-sitter-bash": "0.25.1", "tslog": "4.11.0", - "typebox": "1.3.6", + "typebox": "1.3.14", "typescript": "6.0.3", - "undici": "8.9.0", + "undici": "8.10.0", "web-push": "3.6.7", - "web-tree-sitter": "0.26.11", - "ws": "8.21.1", + "web-tree-sitter": "0.26.12", + "ws": "8.21.3", "yaml": "2.9.0", "zod": "4.4.3" }, "devDependencies": { "@a2ui/lit": "0.10.3", "@a2ui/web_core": "0.10.6", - "@copilotkit/aimock": "1.37.4", + "@copilotkit/aimock": "1.38.0", "@lit-labs/signals": "0.3.0", "@lit/context": "1.1.6", "@lit/task": "1.0.3", "@mdx-js/mdx": "3.1.1", "@openclaw/session-url-contract": "workspace:*", "@opentelemetry/sdk-node": "0.221.0", - "@shikijs/core": "4.3.1", - "@shikijs/engine-javascript": "4.3.1", - "@shikijs/engine-oniguruma": "4.3.1", + "@shikijs/core": "4.4.3", + "@shikijs/engine-javascript": "4.4.3", + "@shikijs/engine-oniguruma": "4.4.3", "@types/express": "5.0.6", "@types/hosted-git-info": "3.0.5", "@types/markdown-it": "14.1.2", "@types/mdast": "4.0.4", "@types/ms": "2.1.0", - "@types/node": "26.1.2", - "@types/semver": "7.7.1", + "@types/node": "26.2.0", + "@types/semver": "7.8.0", "@types/web-push": "3.6.4", "@types/ws": "8.18.1", "@typescript/native-preview": "7.0.0-dev.20260707.2", "@vitest/coverage-v8": "4.1.10", - "esbuild": "0.28.1", - "ipaddr.js": "2.4.0", - "jscpd": "5.0.12", + "esbuild": "0.28.2", + "ipaddr.js": "2.5.0", + "jscpd": "5.0.15", "jsdom": "29.1.1", "lit": "3.3.3", "lit-analyzer": "2.0.3", - "markdown-it": "14.3.0", - "marked": "18.0.7", + "markdown-it": "15.0.0", + "marked": "18.0.9", "oxfmt": "0.60.0", - "oxlint": "1.75.0", + "oxlint": "1.78.0", "oxlint-tsgolint": "7.0.2001", "playwright": "1.62.1", + "postcss": "8.5.26", "postcss-lit": "1.4.1", - "shiki": "4.3.1", + "shiki": "4.4.3", "signal-utils": "0.21.1", "sigstore": "5.0.0", "string-width": "8.2.2", "stylelint": "17.14.1", "stylelint-config-recommended": "18.0.0", - "tsdown": "0.22.1", - "tsx": "4.23.1", + "tsdown": "0.22.14", + "tsx": "4.23.12", "unrun": "0.3.1", - "vite": "8.1.5", + "vite": "8.2.1", "vitest": "4.1.10" }, "optionalDependencies": { @@ -2146,5 +2147,5 @@ "engines": { "node": ">=22.22.3 <23 || >=24.15.0 <25 || >=25.9.0" }, - "packageManager": "pnpm@11.15.1+sha512.81350b07e53c9538a02f1f2303b4290fa2d7be04e56e2a970c4cc4b417dc761de196edabd49d55c7dc9580db81007c44143e4e3d7e462b3000d23c255122d065" + "packageManager": "pnpm@11.22.0+sha512.1ff870c4c6133dfd88fb2afc46dd13d47f09c9794b438c6fdb47ca98caf3bc16381ee0be93a091b8e3824cf01f889f46d7d9e20910fb0be1ab0fb5baa80dd621" } diff --git a/packages/agent-core/package.json b/packages/agent-core/package.json index 05d78cf3bb3e..b10bb74e3ab3 100644 --- a/packages/agent-core/package.json +++ b/packages/agent-core/package.json @@ -66,6 +66,6 @@ "@openclaw/ai": "workspace:*", "@openclaw/llm-core": "workspace:*", "@openclaw/normalization-core": "workspace:*", - "typebox": "1.3.6" + "typebox": "1.3.14" } } diff --git a/packages/ai/package.json b/packages/ai/package.json index abfac7faedbb..87c35bdabb4a 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -103,12 +103,12 @@ } }, "dependencies": { - "@anthropic-ai/sdk": "0.115.0", - "@google/genai": "2.13.0", + "@anthropic-ai/sdk": "0.117.1", + "@google/genai": "2.17.1", "@mistralai/mistralai": "2.5.0", - "openai": "6.49.0", + "openai": "7.4.0", "partial-json": "0.1.7", - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/model-catalog-core": "workspace:*", diff --git a/packages/ai/src/providers/google-shared.ts b/packages/ai/src/providers/google-shared.ts index 5cda66ae63f7..5b49cdc90966 100644 --- a/packages/ai/src/providers/google-shared.ts +++ b/packages/ai/src/providers/google-shared.ts @@ -731,6 +731,7 @@ function mapStopReason(reason: FinishReason): StopReason { case FinishReason.OTHER: case FinishReason.LANGUAGE: case FinishReason.MALFORMED_FUNCTION_CALL: + case FinishReason.TOO_MANY_TOOL_CALLS: case FinishReason.UNEXPECTED_TOOL_CALL: case FinishReason.NO_IMAGE: return "error"; diff --git a/packages/gateway-client/package.json b/packages/gateway-client/package.json index 79af62c9f563..8be225bad606 100644 --- a/packages/gateway-client/package.json +++ b/packages/gateway-client/package.json @@ -66,8 +66,8 @@ }, "dependencies": { "@openclaw/gateway-protocol": "workspace:*", - "ipaddr.js": "2.4.0", - "ws": "8.21.1" + "ipaddr.js": "2.5.0", + "ws": "8.21.3" }, "devDependencies": { "@openclaw/normalization-core": "workspace:*" diff --git a/packages/gateway-protocol/package.json b/packages/gateway-protocol/package.json index b9e900a3c8dd..5f01a93d2c75 100644 --- a/packages/gateway-protocol/package.json +++ b/packages/gateway-protocol/package.json @@ -78,7 +78,7 @@ "prepack": "pnpm run build && node --import tsx ../../scripts/protocol-gen.ts --out ./protocol.schema.json" }, "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" }, "devDependencies": { "@openclaw/normalization-core": "workspace:*" diff --git a/packages/llm-core/package.json b/packages/llm-core/package.json index 6669944e6b40..b56b1eb2ace2 100644 --- a/packages/llm-core/package.json +++ b/packages/llm-core/package.json @@ -36,6 +36,6 @@ } }, "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.14" } } diff --git a/packages/markdown-core/package.json b/packages/markdown-core/package.json index 6462c1b24e08..4a1ebc063323 100644 --- a/packages/markdown-core/package.json +++ b/packages/markdown-core/package.json @@ -59,8 +59,8 @@ "@openclaw/normalization-core": "workspace:*", "mdast-util-from-markdown": "2.0.3", "mdast-util-gfm-table": "2.0.0", - "markdown-it": "14.3.0", - "markdown-it-cjk-friendly": "2.0.2", + "markdown-it": "15.0.0", + "markdown-it-cjk-friendly": "2.0.3", "micromark-extension-gfm-table": "2.1.1", "yaml": "2.9.0" } diff --git a/packages/markdown-core/src/assistant-transcript.ts b/packages/markdown-core/src/assistant-transcript.ts index 5226d289f677..d70265e6c96d 100644 --- a/packages/markdown-core/src/assistant-transcript.ts +++ b/packages/markdown-core/src/assistant-transcript.ts @@ -1,6 +1,5 @@ // Assistant transcript annotations are produced after Markdown inline parsing and text joining. -import type MarkdownIt from "markdown-it"; -import type Token from "markdown-it/lib/token.mjs"; +import type { MarkdownIt, StateCore, Token } from "markdown-it"; import { findAssistantTranscriptRoleHeaderSpans, type AssistantTranscriptRoleHeaderSpan, @@ -111,7 +110,7 @@ function visibleTokensProjection( } function cloneToken( - TokenType: typeof Token, + TokenType: StateCore["Token"], source: Token, content: string, type: string = source.type, @@ -129,7 +128,7 @@ function cloneToken( } function annotatedToken( - TokenType: typeof Token, + TokenType: StateCore["Token"], source: Token, content: string, span: AssistantTranscriptRoleHeaderSpan, @@ -146,7 +145,7 @@ function annotatedToken( } function splitVisibleToken(params: { - TokenType: typeof Token; + TokenType: StateCore["Token"]; token: Token; visibleStart: number; spanStartIndex: number; @@ -195,7 +194,7 @@ function splitVisibleToken(params: { } function annotateInlineChildren( - TokenType: typeof Token, + TokenType: StateCore["Token"], children: Token[], preserveLinks: boolean, options: AssistantTranscriptRoleMarkdownOptions, @@ -310,7 +309,7 @@ function removeLinksContainingAssistantTranscriptRoles(tokens: Token[]): Token[] return result; } -function annotateHtmlBlock(TokenType: typeof Token, token: Token): Token[] { +function annotateHtmlBlock(TokenType: StateCore["Token"], token: Token): Token[] { const spans = findAssistantTranscriptRoleHeaderSpans( token.content, findRawCodeContainerRanges(token.content), diff --git a/packages/markdown-core/src/html-tags.ts b/packages/markdown-core/src/html-tags.ts index 4e164086b942..48791fc0ddc8 100644 --- a/packages/markdown-core/src/html-tags.ts +++ b/packages/markdown-core/src/html-tags.ts @@ -1,4 +1,11 @@ -import { HTML_TAG_RE } from "markdown-it/lib/common/html_re.mjs"; +// markdown-it 15 keeps its quote-aware HTML grammar private; both parser consumers share its exact grammar here. +const MARKDOWN_HTML_TAG_RE = + // oxlint-disable-next-line eslint/no-control-regex -- Preserve markdown-it's exact ASCII control-byte exclusion. + /^(?:<[A-Za-z][A-Za-z0-9-]*(?:\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\s*=\s*(?:[^"'=<>`\x00-\x20]+|'[^']*'|"[^"]*"))?)*\s*\/?>|<\/[A-Za-z][A-Za-z0-9-]*\s*>||<\?[\s\S]*?\?>|]*>|)/; + +export function matchMarkdownHtmlTag(source: string): string | undefined { + return MARKDOWN_HTML_TAG_RE.exec(source)?.[0]; +} type HtmlTagToken = { raw: string; @@ -31,12 +38,11 @@ export function* tokenizeHtmlTags(html: string): Generator { if (start < 0) { return; } - const match = HTML_TAG_RE.exec(html.slice(start)); - if (!match) { + const raw = matchMarkdownHtmlTag(html.slice(start)); + if (!raw) { cursor = start + 1; continue; } - const raw = match[0]; const closing = raw.startsWith("@openai/codex': 0.148.0 - '@anthropic-ai/sdk': 0.115.0 + '@agentclientprotocol/codex-acp@1.4.0>@openai/codex': 0.148.0 + '@codemirror/commands@6.11.0>@codemirror/view': 6.43.9 + '@anthropic-ai/sdk': 0.117.1 '@opentelemetry/core': 2.10.0 '@opentelemetry/propagator-jaeger': 2.10.0 - '@aws-sdk/core': 3.977.1 - '@aws-sdk/credential-provider-node': 3.972.72 - '@aws-sdk/xml-builder': 3.972.37 - '@hono/node-server': 2.0.12 - axios: 1.18.1 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/credential-provider-node': 3.972.80 + '@aws-sdk/xml-builder': 3.972.39 + '@hono/node-server': 2.1.1 + axios: 1.19.0 fast-uri: 4.1.2 - undici@7: 7.29.0 follow-redirects: 1.16.0 defu: 6.1.7 - fast-xml-parser: 5.10.1 + fast-xml-parser: 5.11.0 request: npm:@cypress/request@4.0.1 request-promise: npm:@cypress/request-promise@5.0.0 - basic-ftp: 6.0.2 + basic-ftp: 6.2.0 brace-expansion: 5.0.9 - file-type: 22.0.1 + file-type: 22.0.2 form-data: 4.0.6 werift-ice@0.2.2>ip: npm:neoip@3.1.0 - ip-address: 10.3.1 - minimatch: 10.2.5 + ip-address: 10.5.0 + minimatch: 10.2.6 path-to-regexp: 8.4.2 qs: 6.15.3 sharp: 0.35.3 node-domexception: npm:@nolyfill/domexception@1.0.28 - typebox: 1.3.6 + typebox: 1.3.14 tar: 7.5.22 - tough-cookie: 5.1.2 + tough-cookie: 6.0.2 + zca-js@2.1.2>tough-cookie: 5.1.2 yauzl: 3.4.0 - protobufjs: 8.7.1 + protobufjs: 8.7.2 uuid: 14.0.1 packageExtensionsChecksum: sha256-zZ8fyodhMTumshonC7kktCqTPsiHL3UAyS9vltFAlMo= @@ -49,8 +50,8 @@ importers: specifier: 1.3.0 version: 1.3.0(zod@4.4.3) '@anthropic-ai/sdk': - specifier: 0.115.0 - version: 0.115.0(zod@4.4.3) + specifier: 0.117.1 + version: 0.117.1(zod@4.4.3) '@clack/core': specifier: 1.4.3 version: 1.4.3 @@ -58,11 +59,11 @@ importers: specifier: 1.7.0 version: 1.7.0 '@earendil-works/pi-tui': - specifier: 0.82.1 - version: 0.82.1 + specifier: 0.84.2 + version: 0.84.2 '@google/genai': - specifier: 2.13.0 - version: 2.13.0(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2) + specifier: 2.17.1 + version: 2.17.1(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2) '@grammyjs/runner': specifier: 2.0.3 version: 2.0.3(grammy@1.45.1(supports-color@10.2.2)) @@ -70,11 +71,11 @@ importers: specifier: 1.2.1 version: 1.2.1(grammy@1.45.1(supports-color@10.2.2)) '@homebridge/ciao': - specifier: 1.3.10 - version: 1.3.10(supports-color@10.2.2) + specifier: 1.3.12 + version: 1.3.12(supports-color@10.2.2) '@lydell/node-pty': - specifier: 1.2.0-beta.14 - version: 1.2.0-beta.14 + specifier: 1.2.0-beta.15 + version: 1.2.0-beta.15 '@mistralai/mistralai': specifier: 2.5.0 version: 2.5.0(@opentelemetry/api@1.9.1) @@ -88,20 +89,20 @@ importers: specifier: workspace:* version: link:packages/ai '@openclaw/fs-safe': - specifier: 0.5.5 - version: 0.5.5 + specifier: 0.5.6 + version: 0.5.6 '@openclaw/proxyline': - specifier: 0.3.4 - version: 0.3.4(undici@8.9.0) + specifier: 0.3.7 + version: 0.3.7(undici@8.10.0) '@silvia-odwyer/photon-node': specifier: 0.3.4 version: 0.3.4 '@trycua/cua-driver': - specifier: 0.19.3 - version: 0.19.3 + specifier: 0.20.0 + version: 0.20.0 acorn: - specifier: 8.17.0 - version: 8.17.0 + specifier: 8.18.0 + version: 8.18.0 chalk: specifier: 6.0.0 version: 6.0.0 @@ -109,8 +110,8 @@ importers: specifier: 5.0.0 version: 5.0.0 clawpdf: - specifier: 0.3.0 - version: 0.3.0 + specifier: 0.3.1 + version: 0.3.1 commander: specifier: 15.0.0 version: 15.0.0 @@ -127,20 +128,20 @@ importers: specifier: 8.0.0 version: 8.0.0 execa: - specifier: 10.0.0 - version: 10.0.0 + specifier: 10.0.1 + version: 10.0.1 express: specifier: 5.2.1 version: 5.2.1(supports-color@10.2.2) file-type: - specifier: 22.0.1 - version: 22.0.1(supports-color@10.2.2) + specifier: 22.0.2 + version: 22.0.2(supports-color@10.2.2) grammy: specifier: 1.45.1 version: 1.45.1(supports-color@10.2.2) highlight.js: - specifier: 11.11.1 - version: 11.11.1 + specifier: 11.12.0 + version: 11.12.0 hosted-git-info: specifier: 10.1.1 version: 10.1.1 @@ -163,14 +164,14 @@ importers: specifier: 3.1.5 version: 3.1.5 kysely: - specifier: 0.29.4 - version: 0.29.4 + specifier: 0.29.5 + version: 0.29.5 linkedom: specifier: 0.18.13 version: 0.18.13 minimatch: - specifier: 10.2.5 - version: 10.2.5 + specifier: 10.2.6 + version: 10.2.6 ms: specifier: 2.1.3 version: 2.1.3 @@ -178,8 +179,8 @@ importers: specifier: 1.2.10 version: 1.2.10(supports-color@10.2.2) openai: - specifier: 6.49.0 - version: 6.49.0(@aws-sdk/credential-provider-node@3.972.72)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.6.10)(ws@8.21.1)(zod@4.4.3) + specifier: 7.4.0 + version: 7.4.0(@aws-sdk/credential-provider-node@3.972.80)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.7.3)(ws@8.21.3)(zod@4.4.3) p-limit: specifier: 7.3.1 version: 7.3.1 @@ -199,11 +200,11 @@ importers: specifier: 1.5.4 version: 1.5.4 quickjs-wasi: - specifier: 3.2.0 - version: 3.2.0 + specifier: 3.4.0 + version: 3.4.0 rastermill: - specifier: 0.3.1 - version: 0.3.1 + specifier: 0.3.2 + version: 0.3.2 semver: specifier: 7.8.5 version: 7.8.5 @@ -217,23 +218,23 @@ importers: specifier: 4.11.0 version: 4.11.0 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 typescript: specifier: 6.0.3 version: 6.0.3 undici: - specifier: 8.9.0 - version: 8.9.0 + specifier: 8.10.0 + version: 8.10.0 web-push: specifier: 3.6.7 version: 3.6.7(supports-color@10.2.2) web-tree-sitter: - specifier: 0.26.11 - version: 0.26.11 + specifier: 0.26.12 + version: 0.26.12 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 yaml: specifier: 2.9.0 version: 2.9.0 @@ -248,8 +249,8 @@ importers: specifier: 0.10.6 version: 0.10.6 '@copilotkit/aimock': - specifier: 1.37.4 - version: 1.37.4(vitest@4.1.10) + specifier: 1.38.0 + version: 1.38.0(vitest@4.1.10) '@lit-labs/signals': specifier: 0.3.0 version: 0.3.0 @@ -269,14 +270,14 @@ importers: specifier: 0.221.0 version: 0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) '@shikijs/core': - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.4.3 + version: 4.4.3 '@shikijs/engine-javascript': - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.4.3 + version: 4.4.3 '@shikijs/engine-oniguruma': - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.4.3 + version: 4.4.3 '@types/express': specifier: 5.0.6 version: 5.0.6 @@ -293,11 +294,11 @@ importers: specifier: 2.1.0 version: 2.1.0 '@types/node': - specifier: 26.1.2 - version: 26.1.2 + specifier: 26.2.0 + version: 26.2.0 '@types/semver': - specifier: 7.7.1 - version: 7.7.1 + specifier: 7.8.0 + version: 7.8.0 '@types/web-push': specifier: 3.6.4 version: 3.6.4 @@ -311,17 +312,17 @@ importers: specifier: 4.1.10 version: 4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10) esbuild: - specifier: 0.28.1 - version: 0.28.1 + specifier: 0.28.2 + version: 0.28.2 ipaddr.js: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.5.0 + version: 2.5.0 jscpd: - specifier: 5.0.12 - version: 5.0.12 + specifier: 5.0.15 + version: 5.0.15 jsdom: specifier: 29.1.1 - version: 29.1.1(@noble/hashes@2.2.0) + version: 29.1.1(@noble/hashes@2.3.0) lit: specifier: 3.3.3 version: 3.3.3 @@ -329,29 +330,32 @@ importers: specifier: 2.0.3 version: 2.0.3 markdown-it: - specifier: 14.3.0 - version: 14.3.0 + specifier: 15.0.0 + version: 15.0.0 marked: - specifier: 18.0.7 - version: 18.0.7 + specifier: 18.0.9 + version: 18.0.9 oxfmt: specifier: 0.60.0 version: 0.60.0 oxlint: - specifier: 1.75.0 - version: 1.75.0(oxlint-tsgolint@7.0.2001) + specifier: 1.78.0 + version: 1.78.0(oxlint-tsgolint@7.0.2001) oxlint-tsgolint: specifier: 7.0.2001 version: 7.0.2001 playwright: specifier: 1.62.1 version: 1.62.1 + postcss: + specifier: 8.5.26 + version: 8.5.26 postcss-lit: specifier: 1.4.1 - version: 1.4.1(jiti@2.7.0)(postcss@8.5.23)(supports-color@10.2.2)(tsx@4.23.1)(yaml@2.9.0) + version: 1.4.1(jiti@2.7.0)(postcss@8.5.26)(supports-color@10.2.2)(tsx@4.23.12)(yaml@2.9.0) shiki: - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.4.3 + version: 4.4.3 signal-utils: specifier: 0.21.1 version: 0.21.1(signal-polyfill@0.2.2) @@ -368,20 +372,20 @@ importers: specifier: 18.0.0 version: 18.0.0(stylelint@17.14.1(supports-color@10.2.2)(typescript@6.0.3)) tsdown: - specifier: 0.22.1 - version: 0.22.1(@typescript/native-preview@7.0.0-dev.20260707.2)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1) + specifier: 0.22.14 + version: 0.22.14(@typescript/native-preview@7.0.0-dev.20260707.2)(tsx@4.23.12)(typescript@6.0.3)(unrun@0.3.1) tsx: - specifier: 4.23.1 - version: 4.23.1 + specifier: 4.23.12 + version: 4.23.12 unrun: specifier: 0.3.1 version: 0.3.1 vite: - specifier: 8.1.5 - version: 8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) + specifier: 8.2.1 + version: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) vitest: specifier: 4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) optionalDependencies: sqlite-vec: specifier: 0.1.9 @@ -396,17 +400,17 @@ importers: extensions/acpx: dependencies: '@agentclientprotocol/claude-agent-acp': - specifier: 0.62.0 - version: 0.62.0(@anthropic-ai/sdk@0.115.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3)) + specifier: 0.69.0 + version: 0.69.0(@anthropic-ai/sdk@0.117.1(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3)) '@agentclientprotocol/codex-acp': - specifier: 1.1.7 - version: 1.1.7 + specifier: 1.4.0 + version: 1.4.0 acpx: specifier: 0.13.1 version: 0.13.1 smol-toml: - specifier: 1.7.1 - version: 1.7.1 + specifier: 1.8.0 + version: 1.8.0 zod: specifier: 4.4.3 version: 4.4.3 @@ -430,23 +434,23 @@ importers: extensions/amazon-bedrock: dependencies: '@aws-sdk/client-bedrock': - specifier: 3.1095.0 - version: 3.1095.0 + specifier: 3.1111.0 + version: 3.1111.0 '@aws-sdk/client-bedrock-runtime': - specifier: 3.1095.0 - version: 3.1095.0 + specifier: 3.1111.0 + version: 3.1111.0 '@aws-sdk/credential-provider-node': - specifier: 3.972.72 - version: 3.972.72 + specifier: 3.972.80 + version: 3.972.80 '@smithy/node-http-handler': - specifier: 4.9.11 - version: 4.9.11 + specifier: 4.11.2 + version: 4.11.2 '@smithy/shared-ini-file-loader': - specifier: 4.6.14 - version: 4.6.14 + specifier: 4.7.2 + version: 4.7.2 '@smithy/types': - specifier: 4.16.1 - version: 4.16.1 + specifier: 4.17.2 + version: 4.17.2 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -455,8 +459,8 @@ importers: extensions/amazon-bedrock-mantle: dependencies: '@anthropic-ai/sdk': - specifier: 0.115.0 - version: 0.115.0(zod@4.4.3) + specifier: 0.117.1 + version: 0.117.1(zod@4.4.3) '@aws/bedrock-token-generator': specifier: 1.1.0 version: 1.1.0 @@ -478,14 +482,14 @@ importers: extensions/anthropic-vertex: dependencies: '@anthropic-ai/vertex-sdk': - specifier: 0.19.0 - version: 0.19.0(supports-color@10.2.2)(zod@4.4.3) + specifier: 0.19.4 + version: 0.19.4(supports-color@10.2.2)(zod@4.4.3) google-auth-library: specifier: 10.9.1 version: 10.9.1(supports-color@10.2.2) undici: - specifier: 8.9.0 - version: 8.9.0 + specifier: 8.10.0 + version: 8.10.0 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -518,8 +522,8 @@ importers: extensions/bonjour: dependencies: '@homebridge/ciao': - specifier: 1.3.10 - version: 1.3.10(supports-color@10.2.2) + specifier: 1.3.12 + version: 1.3.12(supports-color@10.2.2) devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -543,11 +547,11 @@ importers: specifier: 1.62.1 version: 1.62.1 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -556,14 +560,14 @@ importers: specifier: workspace:* version: link:../../packages/plugin-sdk undici: - specifier: 8.9.0 - version: 8.9.0 + specifier: 8.10.0 + version: 8.10.0 extensions/buzz: dependencies: nostr-tools: - specifier: 2.24.1 - version: 2.24.1(typescript@7.0.2) + specifier: 2.24.2 + version: 2.24.2(typescript@6.0.3) zod: specifier: 4.4.3 version: 4.4.3 @@ -596,8 +600,8 @@ importers: specifier: 3.3.3 version: 3.3.3 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -624,8 +628,8 @@ importers: extensions/clickclack: dependencies: ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -652,14 +656,14 @@ importers: specifier: 7.8.5 version: 7.8.5 smol-toml: - specifier: 1.7.1 - version: 1.7.1 + specifier: 1.8.0 + version: 1.8.0 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -683,8 +687,8 @@ importers: extensions/copilot: dependencies: '@github/copilot-sdk': - specifier: 1.0.7 - version: 1.0.7 + specifier: 1.0.11 + version: 1.0.11 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -705,11 +709,11 @@ importers: extensions/cua-computer: dependencies: '@trycua/cua-driver': - specifier: 0.19.3 - version: 0.19.3 + specifier: 0.20.0 + version: 0.20.0 rastermill: - specifier: 0.3.1 - version: 0.3.1 + specifier: 0.3.2 + version: 0.3.2 zod: specifier: 4.4.3 version: 4.4.3 @@ -794,17 +798,17 @@ importers: extensions/diffs: dependencies: '@pierre/diffs': - specifier: 1.2.12 - version: 1.2.12(@shikijs/themes@4.3.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 1.3.5 + version: 1.3.5(@shikijs/themes@4.4.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@shikijs/langs': - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.4.3 + version: 4.4.3 playwright-core: specifier: 1.62.1 version: 1.62.1 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -828,8 +832,8 @@ importers: specifier: 0.19.2 version: 0.19.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) discord-api-types: - specifier: 0.38.52 - version: 0.38.52 + specifier: 0.38.53 + version: 0.38.53 libopus-wasm: specifier: 0.2.0 version: 0.2.0 @@ -837,14 +841,14 @@ importers: specifier: 2.0.3 version: 2.0.3(supports-color@10.2.2) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 undici: - specifier: 8.9.0 - version: 8.9.0 + specifier: 8.10.0 + version: 8.10.0 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -859,8 +863,8 @@ importers: extensions/document-extract: dependencies: clawpdf: - specifier: 0.3.0 - version: 0.3.0 + specifier: 0.3.1 + version: 0.3.1 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -899,8 +903,8 @@ importers: extensions/feishu: dependencies: '@larksuiteoapi/node-sdk': - specifier: 1.71.1 - version: 1.71.1(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + specifier: 1.73.0 + version: 1.73.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) mdast-util-from-markdown: specifier: 2.0.3 version: 2.0.3(supports-color@10.2.2) @@ -911,8 +915,8 @@ importers: specifier: 2.1.1 version: 2.1.1 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -927,11 +931,11 @@ importers: extensions/file-transfer: dependencies: minimatch: - specifier: 10.2.5 - version: 10.2.5 + specifier: 10.2.6 + version: 10.2.6 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -940,8 +944,8 @@ importers: extensions/firecrawl: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -977,8 +981,8 @@ importers: extensions/google: dependencies: '@google/genai': - specifier: 2.13.0 - version: 2.13.0(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2) + specifier: 2.17.1 + version: 2.17.1(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2) dotenv: specifier: 17.4.2 version: 17.4.2 @@ -996,8 +1000,8 @@ importers: specifier: 3.10.1 version: 3.10.1 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1049,8 +1053,8 @@ importers: extensions/imessage: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -1096,8 +1100,8 @@ importers: specifier: 11.2.0 version: 11.2.0 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -1141,8 +1145,8 @@ importers: extensions/llm-task: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1156,8 +1160,8 @@ importers: specifier: 2026.6.11 version: 2026.6.11 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1181,17 +1185,17 @@ importers: extensions/matrix: dependencies: '@matrix-org/matrix-sdk-crypto-nodejs': - specifier: 0.6.1 - version: 0.6.1(supports-color@10.2.2) + specifier: 0.6.6 + version: 0.6.6(supports-color@10.2.2) '@matrix-org/matrix-sdk-crypto-wasm': - specifier: 18.4.0 - version: 18.4.0 + specifier: 18.5.0 + version: 18.5.0 fake-indexeddb: specifier: 6.2.5 version: 6.2.5 markdown-it: - specifier: 14.3.0 - version: 14.3.0 + specifier: 15.0.0 + version: 15.0.0 matrix-js-sdk: specifier: 41.9.0 version: 41.9.0 @@ -1199,8 +1203,8 @@ importers: specifier: 11.14.0 version: 11.14.0(supports-color@10.2.2) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -1215,8 +1219,8 @@ importers: extensions/mattermost: dependencies: ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -1240,8 +1244,8 @@ importers: specifier: 7.3.1 version: 7.3.1 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1253,17 +1257,17 @@ importers: extensions/memory-lancedb: dependencies: '@lancedb/lancedb': - specifier: 0.31.0 - version: 0.31.0(@types/node@26.1.2)(apache-arrow@18.1.0) + specifier: 0.37.1 + version: 0.37.1(@types/node@26.2.0)(apache-arrow@18.1.0) apache-arrow: specifier: 18.1.0 version: 18.1.0 openai: - specifier: 6.49.0 - version: 6.49.0(@aws-sdk/credential-provider-node@3.972.72)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.6.10)(ws@8.21.1)(zod@4.4.3) + specifier: 7.4.0 + version: 7.4.0(@aws-sdk/credential-provider-node@3.972.80)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.7.3)(ws@8.21.3)(zod@4.4.3) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1275,8 +1279,8 @@ importers: specifier: 2.0.3 version: 2.0.3(supports-color@10.2.2) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 yaml: specifier: 2.9.0 version: 2.9.0 @@ -1365,30 +1369,30 @@ importers: specifier: 4.13.1 version: 4.13.1(supports-color@10.2.2) '@microsoft/teams.api': - specifier: 2.0.14 - version: 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + specifier: 2.0.15 + version: 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) '@microsoft/teams.apps': - specifier: 2.0.14 - version: 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + specifier: 2.0.15 + version: 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) express: specifier: 5.2.1 version: 5.2.1(supports-color@10.2.2) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 devDependencies: '@microsoft/teams.common': - specifier: 2.0.14 - version: 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + specifier: 2.0.15 + version: 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) '@openclaw/plugin-sdk': specifier: workspace:* version: link:../../packages/plugin-sdk jose: - specifier: 6.2.4 - version: 6.2.4 + specifier: 6.2.9 + version: 6.2.9 openclaw: specifier: workspace:* version: link:../.. @@ -1422,8 +1426,8 @@ importers: extensions/nostr: dependencies: nostr-tools: - specifier: 2.24.1 - version: 2.24.1(typescript@7.0.2) + specifier: 2.24.2 + version: 2.24.2(typescript@6.0.3) zod: specifier: 4.4.3 version: 4.4.3 @@ -1453,8 +1457,8 @@ importers: specifier: 3.3.1 version: 3.3.1 markdown-it: - specifier: 14.3.0 - version: 14.3.0 + specifier: 15.0.0 + version: 15.0.0 yaml: specifier: 2.9.0 version: 2.9.0 @@ -1469,8 +1473,8 @@ importers: extensions/ollama: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1479,8 +1483,8 @@ importers: extensions/onepassword: dependencies: '@openclaw/fs-safe': - specifier: 0.5.5 - version: 0.5.5 + specifier: 0.5.6 + version: 0.5.6 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1492,11 +1496,11 @@ importers: specifier: 0.2.0 version: 0.2.0 werift: - specifier: 0.24.1 - version: 0.24.1(supports-color@10.2.2) + specifier: 0.24.4 + version: 0.24.4(supports-color@10.2.2) ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -1573,8 +1577,8 @@ importers: extensions/qa-channel: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zod: specifier: 4.4.3 version: 4.4.3 @@ -1589,14 +1593,14 @@ importers: extensions/qa-lab: dependencies: '@copilotkit/aimock': - specifier: 1.37.4 - version: 1.37.4(vitest@4.1.10) + specifier: 1.38.0 + version: 1.38.0(vitest@4.1.10) '@modelcontextprotocol/sdk': specifier: 1.30.0 version: 1.30.0(supports-color@10.2.2)(zod@4.4.3) '@openclaw/crabline': - specifier: 0.1.11 - version: 0.1.11 + specifier: 0.1.17 + version: 0.1.17 playwright-core: specifier: 1.62.1 version: 1.62.1 @@ -1604,8 +1608,8 @@ importers: specifier: 7.8.5 version: 7.8.5 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 yaml: specifier: 2.9.0 version: 2.9.0 @@ -1632,8 +1636,8 @@ importers: specifier: workspace:* version: link:../.. vite: - specifier: 8.1.5 - version: 8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) + specifier: 8.2.1 + version: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) extensions/qianfan: devDependencies: @@ -1663,17 +1667,17 @@ importers: extensions/reef: dependencies: '@noble/ciphers': - specifier: 2.2.0 - version: 2.2.0 + specifier: 2.3.0 + version: 2.3.0 '@noble/curves': - specifier: 2.2.0 - version: 2.2.0 + specifier: 2.3.0 + version: 2.3.0 '@noble/hashes': - specifier: 2.2.0 - version: 2.2.0 + specifier: 2.3.0 + version: 2.3.0 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -1709,8 +1713,8 @@ importers: extensions/signal: dependencies: ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -1737,14 +1741,14 @@ importers: specifier: 1.6.0 version: 1.6.0 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 undici: specifier: 7.29.0 version: 7.29.0 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -1791,8 +1795,8 @@ importers: extensions/tavily: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1801,8 +1805,8 @@ importers: extensions/teams-meetings: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -1823,11 +1827,11 @@ importers: specifier: 1.45.1 version: 1.45.1(supports-color@10.2.2) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 undici: - specifier: 8.9.0 - version: 8.9.0 + specifier: 8.10.0 + version: 8.10.0 zod: specifier: 4.4.3 version: 4.4.3 @@ -1845,14 +1849,14 @@ importers: extensions/tlon: dependencies: '@aws-sdk/client-s3': - specifier: 3.1095.0 - version: 3.1095.0 + specifier: 3.1111.0 + version: 3.1111.0 '@aws-sdk/s3-request-presigner': - specifier: 3.1095.0 - version: 3.1095.0 + specifier: 3.1111.0 + version: 3.1111.0 '@tloncorp/tlon-skill': - specifier: 0.4.5 - version: 0.4.5 + specifier: 0.5.0 + version: 0.5.0 '@urbit/aura': specifier: 3.0.0 version: 3.0.0 @@ -1938,11 +1942,11 @@ importers: extensions/voice-call: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 zod: specifier: 4.4.3 version: 4.4.3 @@ -2001,11 +2005,11 @@ importers: specifier: 2.2.3 version: 2.2.3 baileys: - specifier: 7.0.0-rc13 - version: 7.0.0-rc13(audio-decode@2.2.3)(sharp@0.35.3(@types/node@26.1.2))(supports-color@10.2.2) + specifier: 7.0.0-rc14 + version: 7.0.0-rc14(audio-decode@2.2.3)(sharp@0.35.3(@types/node@26.2.0))(supports-color@10.2.2) typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -2017,8 +2021,8 @@ importers: extensions/workboard: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -2033,11 +2037,11 @@ importers: extensions/xai: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -2071,8 +2075,8 @@ importers: extensions/zalouser: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 zca-js: specifier: 2.1.2 version: 2.1.2 @@ -2090,8 +2094,8 @@ importers: extensions/zoom-meetings: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -2118,29 +2122,29 @@ importers: specifier: workspace:* version: link:../normalization-core typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 packages/ai: dependencies: '@anthropic-ai/sdk': - specifier: 0.115.0 - version: 0.115.0(zod@4.4.3) + specifier: 0.117.1 + version: 0.117.1(zod@4.4.3) '@google/genai': - specifier: 2.13.0 - version: 2.13.0(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2) + specifier: 2.17.1 + version: 2.17.1(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2) '@mistralai/mistralai': specifier: 2.5.0 version: 2.5.0(@opentelemetry/api@1.9.1) openai: - specifier: 6.49.0 - version: 6.49.0(@aws-sdk/credential-provider-node@3.972.72)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.6.10)(ws@8.21.1)(zod@4.4.3) + specifier: 7.4.0 + version: 7.4.0(@aws-sdk/credential-provider-node@3.972.80)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.7.3)(ws@8.21.3)(zod@4.4.3) partial-json: specifier: 0.1.7 version: 0.1.7 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/model-catalog-core': specifier: workspace:* @@ -2155,11 +2159,11 @@ importers: specifier: workspace:* version: link:../gateway-protocol ipaddr.js: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.5.0 + version: 2.5.0 ws: - specifier: 8.21.1 - version: 8.21.1 + specifier: 8.21.3 + version: 8.21.3 devDependencies: '@openclaw/normalization-core': specifier: workspace:* @@ -2168,8 +2172,8 @@ importers: packages/gateway-protocol: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 devDependencies: '@openclaw/normalization-core': specifier: workspace:* @@ -2178,8 +2182,8 @@ importers: packages/llm-core: dependencies: typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 packages/markdown-core: dependencies: @@ -2187,11 +2191,11 @@ importers: specifier: workspace:* version: link:../normalization-core markdown-it: - specifier: 14.3.0 - version: 14.3.0 + specifier: 15.0.0 + version: 15.0.0 markdown-it-cjk-friendly: - specifier: 2.0.2 - version: 2.0.2(@types/markdown-it@14.1.2)(markdown-it@14.3.0) + specifier: 2.0.3 + version: 2.0.3(@types/markdown-it@14.1.2)(markdown-it@15.0.0) mdast-util-from-markdown: specifier: 2.0.3 version: 2.0.3(supports-color@10.2.2) @@ -2211,8 +2215,8 @@ importers: specifier: workspace:* version: link:../normalization-core file-type: - specifier: 22.0.1 - version: 22.0.1(supports-color@10.2.2) + specifier: 22.0.2 + version: 22.0.2(supports-color@10.2.2) packages/media-generation-core: dependencies: @@ -2253,17 +2257,17 @@ importers: specifier: workspace:* version: link:../normalization-core ipaddr.js: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.5.0 + version: 2.5.0 packages/normalization-core: dependencies: libphonenumber-js: - specifier: 1.13.9 - version: 1.13.9 + specifier: 1.13.11 + version: 1.13.11 typebox: - specifier: 1.3.6 - version: 1.3.6 + specifier: 1.3.14 + version: 1.3.14 packages/plugin-package-contract: {} @@ -2315,11 +2319,11 @@ importers: ui: dependencies: '@awesome.me/webawesome': - specifier: 3.10.0 - version: 3.10.0(@floating-ui/utils@0.2.12)(@types/node@24.13.3)(@types/react@19.2.17) + specifier: 3.11.0 + version: 3.11.0(@floating-ui/utils@0.2.12)(@types/node@26.2.0)(@types/react@19.2.17) '@codemirror/commands': - specifier: 6.10.4 - version: 6.10.4 + specifier: 6.11.0 + version: 6.11.0 '@codemirror/language': specifier: 6.12.4 version: 6.12.4 @@ -2330,8 +2334,8 @@ importers: specifier: 6.7.1 version: 6.7.1 '@codemirror/view': - specifier: 6.43.6 - version: 6.43.6 + specifier: 6.43.9 + version: 6.43.9 '@lezer/highlight': specifier: 1.2.3 version: 1.2.3 @@ -2351,8 +2355,8 @@ importers: specifier: 3.1.0 version: 3.1.0 '@noble/hashes': - specifier: 2.2.0 - version: 2.2.0 + specifier: 2.3.0 + version: 2.3.0 '@novnc/novnc': specifier: 1.7.0 version: 1.7.0 @@ -2402,8 +2406,8 @@ importers: specifier: 0.4.0 version: 0.4.0 highlight.js: - specifier: 11.11.1 - version: 11.11.1 + specifier: 11.12.0 + version: 11.12.0 json5: specifier: 2.2.3 version: 2.2.3 @@ -2411,8 +2415,8 @@ importers: specifier: 3.3.3 version: 3.3.3 markdown-it: - specifier: 14.3.0 - version: 14.3.0 + specifier: 15.0.0 + version: 15.0.0 markdown-it-task-lists: specifier: 2.1.1 version: 2.1.1 @@ -2428,16 +2432,16 @@ importers: version: 14.1.2 '@vitest/browser': specifier: 4.1.10 - version: 4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) + version: 4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10) '@vitest/browser-playwright': specifier: 4.1.10 - version: 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) + version: 4.1.10(playwright@1.62.1)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10) fake-indexeddb: specifier: 6.2.5 version: 6.2.5 jsdom: specifier: 29.1.1 - version: 29.1.1(@noble/hashes@2.2.0) + version: 29.1.1(@noble/hashes@2.3.0) openclaw: specifier: workspace:* version: link:.. @@ -2447,12 +2451,15 @@ importers: playwright: specifier: 1.62.1 version: 1.62.1 + postcss: + specifier: 8.5.26 + version: 8.5.26 vite: - specifier: 8.1.5 - version: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) + specifier: 8.2.1 + version: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) vitest: specifier: 4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) packages: @@ -2467,13 +2474,13 @@ packages: '@a2ui/web_core@0.10.6': resolution: {integrity: sha512-kTwir93Fk5eupl4FZ6CkhJDrisR2fnQgEIlDCTp06uzx2PvUhItbq1E+h7hFyeHGTu/NMci9Tqn7Is1IVRpufw==} - '@agentclientprotocol/claude-agent-acp@0.62.0': - resolution: {integrity: sha512-8QRNmyk5Cfy4XVREeg5KCPoCDtmYS0xALY9WqI640PfopLMpeUzMByXbzLkBLbD819zB67DBhLG5ta98uOEPKg==} + '@agentclientprotocol/claude-agent-acp@0.69.0': + resolution: {integrity: sha512-YH4k22QvewY4dlxR7IOEhPk4IyTSvvUMUYfTF1cfD/JasPWonjylCJjeUCp3bOyQhlh3LvxsCCAPKkTa+V/a/g==} engines: {node: '>=22'} hasBin: true - '@agentclientprotocol/codex-acp@1.1.7': - resolution: {integrity: sha512-bhFLbGtOMEw6+PAp33vNERb6dXlULOfV3mWbRdps4v7sY7PHha/C2T1dnlG0yVcvBu9W+NYPzL0CAupnVoFTiQ==} + '@agentclientprotocol/codex-acp@1.4.0': + resolution: {integrity: sha512-Fo12tKFerUZltUgM8PxBiUBVxrYrIMK24zlOmQabnJtysPHrAwNq+CXMA0AMepPPEP3RlfDXOQPtjBGhv+Rd4w==} hasBin: true '@agentclientprotocol/sdk@1.3.0': @@ -2481,60 +2488,60 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.219': - resolution: {integrity: sha512-TQhGAlbMsOGXi03dwf4nD274Lc5BOJg4QFJTuXcQyhLhx0hUqzxCmtvpXt6S70K6yl1Zgc+2n5W/r1Dgt8G8iw==} + '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.232': + resolution: {integrity: sha512-+/4PX+dwmQAjlOlooocwa3kClulZfMo133xQH3LYDlK7D5bzze16lwlDGPVAYGEarpvXg7G5JK8QjfWAJ2HYbg==} cpu: [arm64] os: [darwin] - '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.219': - resolution: {integrity: sha512-zA/wHN+os4yqXASXJxvGGNSD1p7LZ6BMN71CCphoy5u+d6IpNOCtATnZwINEc2fGFHpv/QDci6jhywJ2O9Flbw==} + '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.232': + resolution: {integrity: sha512-EHZ1Y3aGyZ2mFZ6QLR1bM3/HiIn2cLrPjU+k3/oCIW6omJFodfzf410aWjDPSnMj7CE4d6t7MSjBWekMUbcv0g==} cpu: [x64] os: [darwin] - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.219': - resolution: {integrity: sha512-yiZo+UBCp42FAYqSakgVj/g6LfTH0AklWqIZNEHfVDPaofledXdSu0QJM5yScWNg0hVMaNRXPt0DmuS1oIWW6g==} + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.232': + resolution: {integrity: sha512-XkLcb9UT/l42Rtw7KBApzgxUe/kwoWJ9KCPcVEnYojzIvVR+AwBCl/QReNU5+6c72w48dYBMmLebI64gQbN0tg==} cpu: [arm64] os: [linux] libc: [musl] - '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.219': - resolution: {integrity: sha512-lizasky9Xj0ouYrz/Akst573Sm8NO3k/0iGCeCDBoQKLnONbVFwc7sHq9x426Pfcllgb4C2Xyc79/1iOALh/9g==} + '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.232': + resolution: {integrity: sha512-wW2opwA5s7gLghjU6B2ADMAtoc7bAZMevUzi4g+1PXMJ8MGcPvbnx92EDYJrVDcZmAl1+fz19XyPsaShlisTzw==} cpu: [arm64] os: [linux] libc: [glibc] - '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.219': - resolution: {integrity: sha512-IhfG57/XorWOQTB6BVdjEFPGH0LwOWO6HnAi+FNuCeiC+XRFl9QI9AKY43opS0gbvJWRobZO865tHX5j7Ou+ow==} + '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.232': + resolution: {integrity: sha512-L1x2ge9NpXMLTczmT44TKPQ88PHE+gsCakQMVEOa8rXFvfBoqvcpxM0DT8wrqYWUHhQEYR8NXxQTP9a1NVRj8Q==} cpu: [x64] os: [linux] libc: [musl] - '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.219': - resolution: {integrity: sha512-yzXhEsT5XcKa8Dc3sM4D1CQ92/6YGmsBbAhRAdw0PYNkG8x6wbHqfzYZS491Bdjry4tSWemNFtGPNkHiWVo3Hg==} + '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.232': + resolution: {integrity: sha512-6Px1xDiwQyLkSxwRQ34/kPA8WMXQ2rHYGkwockND7+9yMw+ShI3AfLkyi9G7JtJHObWFT6B82eSHjDS/Fy+9hQ==} cpu: [x64] os: [linux] libc: [glibc] - '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.219': - resolution: {integrity: sha512-L/cAT27t3FGP4GlJ16WpXMtaeqDu9olpOlIaqqmjElQp5Lknd8alJ3NIY/SlRAtHDvm4WXug74wnfBOSlwppkg==} + '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.232': + resolution: {integrity: sha512-fDiuwL5dm1elOy7fNp4Qmdor8so4R8npj2pUGQA1G/xKfJhaK236aTWezvZid3L/O7cRdFeN9IVofOAlWLQcsw==} cpu: [arm64] os: [win32] - '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.219': - resolution: {integrity: sha512-Fl8Rb9K64jbpC/omIF9y828LIvwRmm1zhZgO8zjalTpjZR/0C31Kl+5FwAS9KkXXUXwmdHSY+82e9dyvBrbIRw==} + '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.232': + resolution: {integrity: sha512-Hc/9uy1BI9mqKVyB1b/zoUnm3MFgtVNzQY6p5zgaq9DaIjCKDpR4a4L1aDZM4lMqUcWFMZM+u7juOhh+m39NBQ==} cpu: [x64] os: [win32] - '@anthropic-ai/claude-agent-sdk@0.3.219': - resolution: {integrity: sha512-dJjzKxoyCQSEEEo9a0g3wBQprRMCpsqjmsNOZaGOWw+W+JHZsolDBhoYfoZ9BA8EdwgaJmbQUvhkAZjROUsBnQ==} + '@anthropic-ai/claude-agent-sdk@0.3.232': + resolution: {integrity: sha512-8od7hJk9fZnF1/oYYiR9PvroGbZRQrpmNgKirjHNGoj5ur5YcAZLohI70XVUAUe3KvjB1msLxtkvmlAT9sqFAg==} engines: {node: '>=18.0.0'} peerDependencies: - '@anthropic-ai/sdk': 0.115.0 + '@anthropic-ai/sdk': 0.117.1 '@modelcontextprotocol/sdk': ^1.29.0 zod: ^4.0.0 - '@anthropic-ai/sdk@0.115.0': - resolution: {integrity: sha512-BJrFIVyjNuU8lfDyIJTvlRYzgQg+zEl78BxE7fq8esULsGz9IRQvGtW5spq3tydmtjQb/GFdooKGdGsetpx+lQ==} + '@anthropic-ai/sdk@0.117.1': + resolution: {integrity: sha512-Yn2QlXfyCiKJ5YGCOOay7ZE78ISvII2XY621WMCiflmG8IYgwx59IBwPExxki3Xk9jKUtnD/Sj6UvplWr0rZxg==} hasBin: true peerDependencies: zod: ^3.25.0 || ^4.0.0 @@ -2542,8 +2549,8 @@ packages: zod: optional: true - '@anthropic-ai/vertex-sdk@0.19.0': - resolution: {integrity: sha512-Ja5NkDAmdCcvCJCvkY/6uJ+9krOiXFN56dzb+8n5apElHrYpUMlOCHCVRuLLsJCVWTsN8w60sgN9RSXZ+LPqNA==} + '@anthropic-ai/vertex-sdk@0.19.4': + resolution: {integrity: sha512-du5/eNdCTT7OgloGTCrrfUJ076qLtsuChr9ps1RsfXElvAAJ5in0dAH39ovMoO5CnA9QjiABbsAZ814HjBbx+A==} '@asamuzakjp/css-color@5.1.11': resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} @@ -2560,32 +2567,29 @@ packages: '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@awesome.me/webawesome@3.10.0': - resolution: {integrity: sha512-QrVKGTiz9OhtIoDic7RF6o1x5ShnJI7jgxK93uoSBh3INYlUyejKYXohXqpJ2cgjIJqfo0jMSQygd1Ty96QOMA==} + '@awesome.me/webawesome@3.11.0': + resolution: {integrity: sha512-WM8kyP+AdAT3/zwNpc/YzN3Nu5pRD6ksREFZAct/DIn6KMnQs8lPVfiPbJrOpKMk8OaSnQX19iiwFGjoswXVXw==} engines: {node: '>=14.17.0'} - '@aws-sdk/checksums@3.1000.20': - resolution: {integrity: sha512-uc5PMNcLcs+UBSLGsRjbMZKi3mgnPSalXpABw9Xjo0DMrv4gjIa/E4a02yJsuU4FF6Tmvis/JgGdKNIOoN4DQw==} + '@aws-sdk/checksums@3.1000.29': + resolution: {integrity: sha512-Dtu0gr4dnATZAPwEYbpCsG+MpLM7OAliy2gTepEFQwl1vZ6DL3QMH2FveMa3HLvPsOdhJsPRB3KtxVhph9T75A==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-bedrock-runtime@3.1095.0': - resolution: {integrity: sha512-DWcwoQdQPrQJxnG3hz1sG88EjfzGv3SReRy4mtAO+pZXtLX+trriTa20o+qcTmVzwqS43JXtX26ythOzErev9A==} + '@aws-sdk/client-bedrock-runtime@3.1111.0': + resolution: {integrity: sha512-+HHZEehmRaGo1F7YVACor/xARM+m1j8YloFaXfoWn4TIPRojUQId/wyItH2jXyro8JoL78CRRZSI1Z8StX0ldQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-bedrock@3.1095.0': - resolution: {integrity: sha512-vphUT7Ff7l3z02vZx7clrE/BW76Dy30LkQzNEmFrD8y/6/N9bVk44/Qwr51tkFC2juNTB7p5C+O1ojh8YUPhFw==} + '@aws-sdk/client-bedrock@3.1111.0': + resolution: {integrity: sha512-aIUsNVpD/NMLx/QGYL3LZ+pcodK4eKpFhSPvo65+H99yQNst1WD+PgVTA/wKvQyPjd6hI5XyVQuRdH9tZwwTTw==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-s3@3.1095.0': - resolution: {integrity: sha512-eeobm3TKci47CTTHIxc5s5UDjLL0gTKfjlcyzKU+NMoeIJ3flKPq51Fhi2nUDiMNbzsY5HAynM3bHAQFHxRTUw==} + '@aws-sdk/client-s3@3.1111.0': + resolution: {integrity: sha512-VnLT6aSTN8tWl/NsXUysXNZor7wQBp9CRwufo7kt8cwGXvHLZ0S/cV1K9WFcREGboVYSo3NGQ3ZvU7LRidh2aQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.977.1': - resolution: {integrity: sha512-KVtQRtc00ES/y+Sc3vYXeP6pCIcNlBJCZOwvqSy8ZpVGmbM5+IG+AfhuTKQ2oXmIVqZJewaGMMpzPkywC6xg0w==} + '@aws-sdk/core@3.977.8': + resolution: {integrity: sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg==} engines: {node: '>=20.0.0'} - deprecated: |- - Deprecated due to Document number parsing bug in JSON, see - https://github.com/aws/aws-sdk-js-v3/issues/8246. Newer version available. '@aws-sdk/credential-provider-cognito-identity@3.972.60': resolution: {integrity: sha512-16Fxa3veKIO6nHJr+vN76z3BkSU7725lzruc5S2SQSTUTbK4TXtmi8033WQljZj4k1+383UsMaNOHN6B76fK5A==} @@ -2595,10 +2599,22 @@ packages: resolution: {integrity: sha512-qihs2ekMb89Nxd2JenCgVFhjbkb3EIo7HEBCBzyZACKVJdrLUZBLOmAE3xr0Sayml8n/jZSzwO/IufIiIzO7PQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-env@3.972.70': + resolution: {integrity: sha512-H404B7dJl2mCrBqahDEYsanB0xhdDp6tXnXcTUnXmmpy2Q3J0Ho0bUajZ2jr/RdwzCyS59Gi8xXIFwPLGBl6Uw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.972.63': resolution: {integrity: sha512-yfozsS8wkWZEi/n6IsrodcFKBWZ0iNAezhJbTReMNc0z1Px17qdeAeuL1/wziCAmCZyXiW7QzP75ggJkBQv8jQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.972.72': + resolution: {integrity: sha512-X98zYOrVOeuosCX+6ktf29FC2N2GHPLia7qv6mzPzTc+RPAuHWCDS++Z6JK7eGYqb/v6uaW7bAXaOvDBfol+0w==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-ini@3.973.15': + resolution: {integrity: sha512-Rykg6s5ceBuynMOGWgoowO4N+27JfnqXAnVaSunZl0hOO1XodSrxGNz6sCEbnmS0lAfQZDKyb3fbr46gSuv6Sg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.973.6': resolution: {integrity: sha512-jGLTW1bj148GL/6/IMlfY2fMYS9FtHOG+NahkFD4y0qkzYudNUahelxryY68/HGMslYuHClk1XaS/3b3eJzEkg==} engines: {node: '>=20.0.0'} @@ -2607,14 +2623,26 @@ packages: resolution: {integrity: sha512-w6tNci6g7RqFpLhj1f5xseBvaNojb4Pkgp5Jp5apl9hrJtaf2AA+rX9+qlhlWUK6kcyAFYPA7emO+55zj+S98Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.72': - resolution: {integrity: sha512-blQ7F5QGzylnzeh5549zQLoCAiMHkXFLjFovEMaVy4b2X8JhUu+u9NXro1hyK95YHdVFNmBHKs2hIHtZchxKlQ==} + '@aws-sdk/credential-provider-login@3.972.77': + resolution: {integrity: sha512-Jb59xfEISoN5mmbnA+HYqdtrSX3CgCtJoof+V5D8/TgUI56W63GEEd5Y58WijU3Ou6+WEgaLD1feVzaRXV5IDQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-node@3.972.80': + resolution: {integrity: sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-process@3.972.61': resolution: {integrity: sha512-xzRuj+fUVO4nkafKQJVKAF97kGpeQbfjuwmRrtGZNf42/1dkmcz6o7dswBy7alY0htQn5sCL1GWQYEykviWZkA==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.972.70': + resolution: {integrity: sha512-2ry03fGRJr4sV3jI+ocjj5JqALnFD6ymM5KiNCDZMvq8bX2GSbE0vji4aM43TVCl2nXqqLRZaUxdq/KeWRAY4Q==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.973.14': + resolution: {integrity: sha512-jkhg/8ocAAoc0RFyLMhCw+/zZh7gystQgd4F4hznNa8P4Cc501PQmxd+jGLiMHodPJ+7Zv/3znM62gZojyasmA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.973.5': resolution: {integrity: sha512-fZRjjWhLFelsDoOYjqShQTrIGYC3Pf9Mx9Czf+1ikfQDgktxjze33dVo1q1/ZQ+T0qbtejVoHNHrfD5aJVpv/w==} engines: {node: '>=20.0.0'} @@ -2623,52 +2651,76 @@ packages: resolution: {integrity: sha512-FTNZ05gkPBA6CKbU3N4zPgybV+stdazwMOya75CmGdcJL7p8Fw/BdHP8WVxJd0mvzyPK2cg/C3gli58Ir4HgCw==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.76': + resolution: {integrity: sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-providers@3.1095.0': resolution: {integrity: sha512-hcL4iILqep+AieTjJ+eYpBoThcirhlr0rzOqyDKSlFeV15qy8FnvwZFlNmVUFFwHnZjvQz5M9MsRe4XbC6eDfw==} engines: {node: '>=20.0.0'} - '@aws-sdk/eventstream-handler-node@3.972.30': - resolution: {integrity: sha512-hJboPgIpq5+ADc++/B9TBqn65CXV21cZLGB8V5RBQbxkZ/rQ6qMfcxTnW/SvQlasX4jhaSG8B1wsVjhQyDrsnQ==} + '@aws-sdk/eventstream-handler-node@3.972.34': + resolution: {integrity: sha512-cTeVzpu1xEAkryTZBYhGwnQ6gOGyp8ZYZvmn0Sg/nI/ABmy/CRHHxPDJDUi9PxwxUtGGaatvfRUB3FCgT/rSWw==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-eventstream@3.972.25': - resolution: {integrity: sha512-9SFbPzJDHHR5k6Q6KvXVas/veUm/TzNcNTFM2UhdXHZHpyIvI2lS+s4cxljw1BihGpVhsAkQDo/2nW7dHxpf4Q==} + '@aws-sdk/middleware-eventstream@3.972.29': + resolution: {integrity: sha512-dlRzHCgyB8W6hLuDC5pcT5q+ziPt00n4QGgGBE17ucLVU4zMa6lsbuUdQ2Pm75Z5VA8GF+R/+SgrRcaTdIzSIQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.66': - resolution: {integrity: sha512-sTZKP1+SvyzWc/3alO8AM/PUiEzDCmn2P/KOcFFSk2UKzKZkB5ZxXdlHVtACE7DHaMFvx6DY0bognwHa1qTv4g==} + '@aws-sdk/middleware-sdk-s3@3.972.75': + resolution: {integrity: sha512-wMIsNumRVKaNMKhvU/s9VrdEwE8S6gSzXp4RygFG5BEMnGkkXf8cjh8zf7cKJBpUDpqTWqwbz5isEgp9rH6Lng==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-websocket@3.972.43': - resolution: {integrity: sha512-n29++15Vma64Kd0enp9Bo8a6LTm8TvUoMbJEwqXtIksv0oEs+SUCRMm3gozDfPD1Ly0k/sSBughxarlLlRF6Xw==} + '@aws-sdk/middleware-websocket@3.972.52': + resolution: {integrity: sha512-vsPPM+nMbKJlUCFU+eoGZbdxdxDIAX9LbpjSXaR5Ufpmqgp8TdYQnoExhLu4T3umW/JIIPny1ydbhWidZZYokQ==} engines: {node: '>= 14.0.0'} '@aws-sdk/nested-clients@3.997.35': resolution: {integrity: sha512-2MJfseVG/aXvIyOIBlYA/Oaf6qFDdsu4D8RKsEUdOQpVuLaor0BdxIBBtJLBNQQEe6Ku3YMvLljwb1MwVUpzRw==} engines: {node: '>=20.0.0'} - '@aws-sdk/s3-request-presigner@3.1095.0': - resolution: {integrity: sha512-Xhzt3Okc8UrxOnOR8zE2/aG12g8A9I9f8DVF4LX9k3QVKt0c7d9wT4VcM5/6gfFRhtsflFMGdo49pEqawiAS2Q==} + '@aws-sdk/nested-clients@3.997.44': + resolution: {integrity: sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/s3-request-presigner@3.1111.0': + resolution: {integrity: sha512-ACp/VtDTw6AjFW5Q3M59uAMrBbAHeQS0UBIOIgUROO98Z3uhpiy37k9RmvxbXYVugmTcdNTy4DPVQtLG8sDy6g==} engines: {node: '>=20.0.0'} '@aws-sdk/signature-v4-multi-region@3.996.42': resolution: {integrity: sha512-DBV4naZP6HYBlAvPpoQzOP12Wvfou/5rN8yJPXjBTBylU5qwCbh/tXr2MddHoIjgoRkEl/eS+IljiUqvmwey1Q==} engines: {node: '>=20.0.0'} + '@aws-sdk/signature-v4-multi-region@3.996.46': + resolution: {integrity: sha512-L+2xZTye/2T96f3lwCws0Zw6GG2JHZW9e8FpVgGBeeExSKyeoZ6CWRpBml/7DNiK/O26jrgPM9F+Ay8VkgzUWQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.1095.0': resolution: {integrity: sha512-65SudS6y4nzaYHybtqcpm3sHe5jLhdMn68HRKS1nUx690BtQeaAQOoujQ+dpOjBATIVGVgKKjEP8tR+U06QJQA==} engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.1111.0': + resolution: {integrity: sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1116.0': + resolution: {integrity: sha512-ygIivKqh8aHzNkucOCXHyIBgBpLPfrSI0mCqXF+vLBsPTUKqj0VSqAY0GFPe7lQl4HntjOcQ+KSyS7oUV2C54Q==} + engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.974.2': resolution: {integrity: sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==} engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.974.5': + resolution: {integrity: sha512-LkwLL2BLbC6wNNm4JaH9mbEqBMdOZCct6VAYqhdN4U1xrWM+fUJQEfbHwQgDypapOWTRtlk25akb5afM0P8CIQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-format-url@3.972.37': resolution: {integrity: sha512-c4bykf3FoSMllBtN53dvPWWtz0/z/IuB6Oj3+8KaQyOsncw75xhr0dA7zXleXzhmfG0xLq3CQKO77dLvGQBZVQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.37': - resolution: {integrity: sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==} + '@aws-sdk/xml-builder@3.972.39': + resolution: {integrity: sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA==} engines: {node: '>=20.0.0'} '@aws/bedrock-token-generator@1.1.0': @@ -2731,10 +2783,6 @@ packages: resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.6': - resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==} - engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-globals@7.29.7': resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} @@ -2743,37 +2791,15 @@ packages: resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.0': - resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} - engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@8.0.0-rc.6': - resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} - engines: {node: ^22.18.0 || >=24.11.0} - - '@babel/helper-validator-identifier@8.0.4': - resolution: {integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==} - engines: {node: ^22.18.0 || >=24.11.0} - '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.0-rc.6': - resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} - engines: {node: ^22.18.0 || >=24.11.0} - hasBin: true - - '@babel/parser@8.0.4': - resolution: {integrity: sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==} - engines: {node: ^22.18.0 || >=24.11.0} - hasBin: true - '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} @@ -2793,10 +2819,6 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@babel/types@8.0.4': - resolution: {integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==} - engines: {node: ^22.18.0 || >=24.11.0} - '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -2837,8 +2859,8 @@ packages: '@codemirror/autocomplete@6.20.3': resolution: {integrity: sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==} - '@codemirror/commands@6.10.4': - resolution: {integrity: sha512-Ryk9y9T0FFVF0cUGhAknveAyUOl/A1qReTFi+qPKtOh2Z9F4AUBz3XOrYD4ZEgZirdugVzHvd/2/Wcwy5OliTg==} + '@codemirror/commands@6.11.0': + resolution: {integrity: sha512-/K4Rl5BN0OtTiPWmJCdqODu38XnDMsDxKY5rgrPnCkutPTJf2wVbkoixLfealF5Kwse/s8P8M5jAiURiwSwnFA==} '@codemirror/lang-angular@0.1.4': resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} @@ -2918,11 +2940,11 @@ packages: '@codemirror/state@6.7.1': resolution: {integrity: sha512-9QzNDgE4EYDnAHfrTlR2lwiPciiOymLtwKK+8yHQzCc7GXhAP9xdEbEJFy2IWB1j9UGUl9BsgMmTo/ImA02T7A==} - '@codemirror/view@6.43.6': - resolution: {integrity: sha512-EVunGSYN1wz1p75WY1s3Xg7t3i8Yol0kGZGizNdX9BUFgMFILYVe8/u6EVpo7Ff5PwbZuILb4QAq7IZoKzIEQA==} + '@codemirror/view@6.43.9': + resolution: {integrity: sha512-sTuUzTpPMFebRhg6dawChoKKgndIwfjmJgKVxBefPElcU2NwQ6AFroupk0SFqEerQyZOGRfDNnSN8Dw/lMAsXw==} - '@copilotkit/aimock@1.37.4': - resolution: {integrity: sha512-3fKSBrs7QDTRmYQM9RVh+2aC95KJcEbNHtAAuD8fJ3NdIx1bNdgWvwgWNJLzAuiZI3kSDwRgA0HlCVD6n0eP+A==} + '@copilotkit/aimock@1.38.0': + resolution: {integrity: sha512-zrGXeSu0/LkHQgrM9Z68uU/k7qpYbnZ25i9djpNlYyDCDCUgKaQPbG1iIYOc+4vuigJmD91ujcK36mBKWz+JVw==} engines: {node: '>=20.15.0'} hasBin: true peerDependencies: @@ -3033,19 +3055,13 @@ packages: resolution: {integrity: sha512-3yJ255e4ag3wfZu/DSxeOZK1UtnqNxnspmLaQetGT0pDkThNZoHs+Zg6dgZZ19JEVomXygvfHn9lNpICZuYtEA==} engines: {node: '>=22.12.0'} - '@earendil-works/pi-tui@0.82.1': - resolution: {integrity: sha512-9yN8hALfKaxZq7n54EMxqhFCWnMi6LHkraMJ/1YjHiATq75XrI6XDMVppn9EDtiK7Fks8hUe1SDXUTrIvwRWfQ==} + '@earendil-works/pi-tui@0.84.2': + resolution: {integrity: sha512-ds2TLihOnM5sLJB3VpXV6y0uR5efVuHf4MN7yDpsty6hA2DUO/EDVzjp/0od0G2JslzVLMjT8T8zavtxVb+qbg==} engines: {node: '>=22.19.0'} - '@emnapi/core@1.11.1': - resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - '@emnapi/core@1.11.2': resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/runtime@1.11.2': resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} @@ -3058,156 +3074,312 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.28.1': resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.28.1': resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.28.1': resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.28.1': resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.28.1': resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.28.1': resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.28.1': resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.28.1': resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.28.1': resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.28.1': resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.28.1': resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.28.1': resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.28.1': resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.28.1': resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.28.1': resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.28.1': resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.28.1': resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.28.1': resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.28.1': resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.28.1': resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openharmony-arm64@0.28.1': resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.28.1': resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.28.1': resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.28.1': resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.28.1': resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eshaz/web-worker@1.2.2': resolution: {integrity: sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==} @@ -3241,68 +3413,68 @@ packages: resolution: {integrity: sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==} engines: {node: ^20.17.0 || >=22.9.0} - '@github/copilot-darwin-arm64@1.0.75': - resolution: {integrity: sha512-avt2ganQwtycGkqz9z8JpARoEz2Fzi02O+WitbB8I8iF3jfvEGpQ8k3z9oSCPAAO0rIMBeSl05xEUUV5RJwfRA==} + '@github/copilot-darwin-arm64@1.0.80': + resolution: {integrity: sha512-fzn4PnSx3+O/a3ip72KVsjnzORsEygK+0i21bFAnFBYS+0Wi1Pk+o/CmNsJ7aRbf1enSJrcH8UDVkyc9pMGEBg==} cpu: [arm64] os: [darwin] hasBin: true - '@github/copilot-darwin-x64@1.0.75': - resolution: {integrity: sha512-eyM5cz83d9h05m6cnnG7tIHR4lSHHXUnxXeQm4rU3nGB1uwHWOa1TH9B4uAaW3zKQgkCkNgm+IlcPJ7geM0KBg==} + '@github/copilot-darwin-x64@1.0.80': + resolution: {integrity: sha512-PKsyGk5DccNzR3bYXcYTGB9N6sHzhzGqEwq/2t1qBwqPbrC98Zo2dOT2G40/QYpJ4XdrGmTmdmfPJQ9PJknlIQ==} cpu: [x64] os: [darwin] hasBin: true - '@github/copilot-linux-arm64@1.0.75': - resolution: {integrity: sha512-PuGjPCy+z7DrD0rkcXQRBzoA8lVxD1WC6UeZxkZaIb9asueE798eqHHMV169zYiA3gsiSegIKu5J/aUeWwhpuQ==} + '@github/copilot-linux-arm64@1.0.80': + resolution: {integrity: sha512-8oXwN2luyHEjIoSk8AkATBjXDhRoQtuiUvC93GpfQKFHI+I1eoOVwIsAq5fKP8jNCF2rOrYFIcTjwmRt38kCcQ==} cpu: [arm64] os: [linux] libc: [glibc] hasBin: true - '@github/copilot-linux-x64@1.0.75': - resolution: {integrity: sha512-aGDtUrNyj/ubqLfXOomL4XYZR//1Cs4tDGe7r/464e3Nw4WlNxWPjBbNyOCcUPUMbPHXck6TyxjEvBwwlKCK5w==} + '@github/copilot-linux-x64@1.0.80': + resolution: {integrity: sha512-qv1ytVNwA3IDK7kcQow+fAikD67t42+AQ8X42bK/7oudNiv4frVZMO0yh1DYIebVRcmEhmPvbVPY/ptVUK3cbA==} cpu: [x64] os: [linux] libc: [glibc] hasBin: true - '@github/copilot-linuxmusl-arm64@1.0.75': - resolution: {integrity: sha512-4cbjjR/laL+4a0VjMkzjIsprRUxiAHAefWVTppFitKiqNxfgyRuOhfSUPUA5TVxPwfyYXknsxeYSNRL8zu9YDA==} + '@github/copilot-linuxmusl-arm64@1.0.80': + resolution: {integrity: sha512-Qjyi+OlVnPC4Lkuy7blDMMwMUQI/yELl7gDnqQlaN8TEbhZqZueuf3p0a+kEjXcNsw4XtNYQc0eMJqSIYy/Pjg==} cpu: [arm64] os: [linux] libc: [musl] hasBin: true - '@github/copilot-linuxmusl-x64@1.0.75': - resolution: {integrity: sha512-I4oFPNOULMGxWghGCG/VkiT0a62UiL4XGKSlp6X0rVD9xyoYyiLGlsBmTumrooPbzEvgKICYWIz8PCZjrZTyhA==} + '@github/copilot-linuxmusl-x64@1.0.80': + resolution: {integrity: sha512-rBg8pugf+5FhiZxi2zkOr+rlcOVF6Xg63j1FvryfwPT4DJ2w5Na7O3lpS4sgu8QmsP5H+dAqjlXYLYsvSoVQ0g==} cpu: [x64] os: [linux] libc: [musl] hasBin: true - '@github/copilot-sdk@1.0.7': - resolution: {integrity: sha512-dgCFCPfxWUkrgclQbrm7WCFzTf5RnJHsK1Lqsc3KjPBbDLPutJT0qIGg3xJ0ZELLyX0icg3TOmVczhR4HdwHxw==} + '@github/copilot-sdk@1.0.11': + resolution: {integrity: sha512-ngrnfa9052fLTOMoY0iiQS2B6pFDYJpWNj3syCdjzdje0R5mWoij9b8exJZciLvX7BbJjKz2/lIdwo24av3e3A==} engines: {node: ^20.19.0 || >=22.12.0} - '@github/copilot-win32-arm64@1.0.75': - resolution: {integrity: sha512-wlLDuor+Qm1H43VwZNi03QI4H9FSyZoQzE/YHpGhUay7sKA+4cDJF8ZZNGrtYkyPskfH5HCdNygUn7EEt6lRyQ==} + '@github/copilot-win32-arm64@1.0.80': + resolution: {integrity: sha512-+f7Vkd3vt2DYOxRnS8dStvYu3DY638N/AuLuIjxZp1F9GgwCUZK69wspqIxg2L59PmRRQcH4AGTrRDR60ENIZA==} cpu: [arm64] os: [win32] hasBin: true - '@github/copilot-win32-x64@1.0.75': - resolution: {integrity: sha512-TKISaaILkgcOi7ThaTnln1XoasbUIx+HKSb+pf678RvGucIfLohQyLceuq+rTykoynX54KQ0pf9TEUbMVkUNAA==} + '@github/copilot-win32-x64@1.0.80': + resolution: {integrity: sha512-PO0kPqhRTWQfsqGaj4UN3cj8ttkcJYy4wmXiArtFm+03AIFu8xTvuhQDPn2xEOsUome7m7t2XomKoavcrCcRsw==} cpu: [x64] os: [win32] hasBin: true - '@github/copilot@1.0.75': - resolution: {integrity: sha512-rn7ZQmhydCZ9XRdG6V78QEhXIdYlChlUvOVAtyJ6KHJGt2O9/71si7PCt84amfmg0N7IXBT2UGRYF4GQDQBt+g==} + '@github/copilot@1.0.80': + resolution: {integrity: sha512-6tf93ZF56KOiTTAjK/UhLZkl1W543IzaTQly288kockJZFswpRTnQEI00Yvacpb39DTvTYu3/ha9SeKpo/pgZQ==} hasBin: true - '@google/genai@2.13.0': - resolution: {integrity: sha512-GM7C8Kaomvjz05x5JEO6+l3d/pciL9LxAG9dUjJLD7nTPZ9X0Cfsf2Z7eET6UjgWyUmxXCHtYnQoQ77F9+ZIOQ==} + '@google/genai@2.17.1': + resolution: {integrity: sha512-CdZ3M/titoH81hXXkvOikrOW26bC9IXh9iYT7u+r+5p7wi1LnMEnB0AbJfDeWAkjuneP4oJ299BtCt6twmORWg==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -3340,12 +3512,12 @@ packages: '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - '@homebridge/ciao@1.3.10': - resolution: {integrity: sha512-ogAVdPZ9Fo3kSaULpq+acxbtbIvMtd2TDYEkqHIsqvQ9QHJnRNcjm8NQzegaBzJ3gUK1mVX07UWs2/B0NmabSw==} + '@homebridge/ciao@1.3.12': + resolution: {integrity: sha512-84/0u0kqKy4qcKupIDaTtbkmk+3qFDuMzxTC0NPfVlHcUT+jHGdP+QCqwEw94/GJxRezDeBLwxaclkBZgCdeUg==} hasBin: true - '@hono/node-server@2.0.12': - resolution: {integrity: sha512-eWpQYr67tqJLeaSUl0Q+TquuYfUdTibpOJlUMV2FfUP7+KqCC5TufnwnlXL6mobZBJbGAYRd7ZvEBDCbLInjhg==} + '@hono/node-server@2.1.1': + resolution: {integrity: sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==} engines: {node: '>=20'} peerDependencies: hono: ^4 @@ -3626,62 +3798,66 @@ packages: cpu: [x64] os: [win32] - '@lancedb/lancedb-darwin-arm64@0.31.0': - resolution: {integrity: sha512-6n3VxAenwcNWQpk9Ta4NL/KhpSywskafarBakzFPGe/OXzdKXbmbXdrhGdl8oMacbfgql6wmW3DcAJAbsiThvw==} + '@lancedb/lancedb-darwin-arm64@0.37.1': + resolution: {integrity: sha512-t/SRU1no2rf7bdgCAIhhAdm8oI/l5ne1Xuq50BEAKxSfJjZq7RSd8Khg0cLy1Pwrfr8v78VpJVluPTbQSn97kQ==} engines: {node: '>= 18'} cpu: [arm64] os: [darwin] - '@lancedb/lancedb-linux-arm64-gnu@0.31.0': - resolution: {integrity: sha512-dWVHk5xhTpXQt08y3pxQFf5DK/O2saiWT8AZIIlonFRbGVhLm1KzBCfCgS1WUVbdleSkqAqY3NnMxZzu/dhx9Q==} + '@lancedb/lancedb-linux-arm64-gnu@0.37.1': + resolution: {integrity: sha512-YvyxTbjsysvrR4kXRzIspDvg+wGH/Xq1yiXEEg0I+gYO7NFq2I+2bYtjOhUcUM+EDVVFP2Y6n7sKZvqqP5dZ/A==} engines: {node: '>= 18'} cpu: [arm64] os: [linux] libc: [glibc] - '@lancedb/lancedb-linux-arm64-musl@0.31.0': - resolution: {integrity: sha512-4y49+83R34IR75H2NPeDtHgSnUIKE9gJoSiELsGmCgICoFTZRVxq88atBEl0BfpsuuUc8S2bSx45mf3H4lZmWA==} + '@lancedb/lancedb-linux-arm64-musl@0.37.1': + resolution: {integrity: sha512-/c8M97zgnpRveB7XBkQb8xtaCgS/h+sZ/txKPE8uNyEKrJK78s8x94hjlnciCZ8cnv90WGzqK0Nf9BA3Up2OGg==} engines: {node: '>= 18'} cpu: [arm64] os: [linux] libc: [musl] - '@lancedb/lancedb-linux-x64-gnu@0.31.0': - resolution: {integrity: sha512-AFc0qTNdjoPor5bEHRuijft0BGNSiyHlF0cdUdsApLvjrl5jTBzw59+EqzjjCevWz5w/44BBjaTt6ZChWVTc/Q==} + '@lancedb/lancedb-linux-x64-gnu@0.37.1': + resolution: {integrity: sha512-PAmTlvNJBE+0t27bBS3PVLt1pSULhnDRSlNSOXkB1roK8g5ay1X6djifkIAkkebM/PCkaJc2aEf3l9lXm2NoAQ==} engines: {node: '>= 18'} cpu: [x64] os: [linux] libc: [glibc] - '@lancedb/lancedb-linux-x64-musl@0.31.0': - resolution: {integrity: sha512-VXtu/xTJXtkfTyUH+MXbMYCGVCAvHJvGDoPNIqDBtrnX7uHlgmxPbw7V97k18/5UVLU2v8NhsM5sCiMD4si+Tw==} + '@lancedb/lancedb-linux-x64-musl@0.37.1': + resolution: {integrity: sha512-ZgpyeNJlzChghoME4P+FwOiuwhNQcVAtab+yiwe4eG87JtSqkS5VjIu40vKWV4XT5lCc5y/yWfpwTuaY496W9g==} engines: {node: '>= 18'} cpu: [x64] os: [linux] libc: [musl] - '@lancedb/lancedb-win32-arm64-msvc@0.31.0': - resolution: {integrity: sha512-AvbnX/24uPh6UP9IRdYZNLc+2iE4uLKIQcEbGXUMLsVIMWQvuHfRamZpIlWb50tz/C7Wo5aPiQIkolPJN5fiuw==} + '@lancedb/lancedb-win32-arm64-msvc@0.37.1': + resolution: {integrity: sha512-fzZWKbZfhA7CJ9axZ7ZyOLJRtgItEudkwWHxzvdS1ta+fhvfoLGP0QTozvJkNVJzG95zXsuQ9uHyzA/7MPlGcA==} engines: {node: '>= 18'} cpu: [arm64] os: [win32] - '@lancedb/lancedb-win32-x64-msvc@0.31.0': - resolution: {integrity: sha512-reFE43TCr5Lifni2fC5YiyOnjDTAXOY37+rAY01FFKZyhjZkhRy9NZN1WvWJ35XHC4eeUVOW4+UXOvSV0djyCA==} + '@lancedb/lancedb-win32-x64-msvc@0.37.1': + resolution: {integrity: sha512-3pfkTlCHPVXn9s7adRbf6mbwUYQxsabzUzCywQnXv+kR46tE1znHjkP44ZganrzH0tVWGL6eOD0Lvsw8tIXYNQ==} engines: {node: '>= 18'} cpu: [x64] os: [win32] - '@lancedb/lancedb@0.31.0': - resolution: {integrity: sha512-EUEVpheKhaCNE6ybcW760OUyfeei2dKR2ZwgLWeC/ntHL4BBiBLIErh9fuEuUP3/mAx4B5UFraB2m5nDUx5XEA==} + '@lancedb/lancedb@0.37.1': + resolution: {integrity: sha512-l+si3t+bQ1JNxrnEfbbfKt9gWk2HcWYWx0dzoEBTVAs8B0BP79OrAv+mKTJ0EwG5wRDS3MwEChEg0g0Wh8I3tQ==} engines: {node: '>= 18'} cpu: [x64, arm64] os: [darwin, linux, win32] peerDependencies: + '@types/node': '>=18' apache-arrow: '>=15.0.0 <=18.1.0' + peerDependenciesMeta: + '@types/node': + optional: true - '@larksuiteoapi/node-sdk@1.71.1': - resolution: {integrity: sha512-Z4cZmgWvwiE7tCHqGm+t7DKvbpNRRTH2HqVwcYiOMAwbjIytXSoQqWytsOVu3p+d0fIvrtyIPZok5HOV/VNxxw==} + '@larksuiteoapi/node-sdk@1.73.0': + resolution: {integrity: sha512-gs4EiupJ6RdYAEJGtuYrCVsB7wSMBwtUDK+ilpmOHD6RTvbtciW6AWciQO9coOQVuBZfh7hvAi25dPfCsny/nA==} '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -3773,48 +3949,48 @@ packages: '@lit/task@1.0.3': resolution: {integrity: sha512-1gJGJl8WON+2j0y9xfcD+XsS1rvcy3XDgsIhcdUW++yTR8ESjZW6o7dn8M8a4SZM8NnJe6ynS2cKWwsbfLOurg==} - '@lydell/node-pty-darwin-arm64@1.2.0-beta.14': - resolution: {integrity: sha512-C0Zxnl8rTrW/ngu1CKb1NoIiBxoCDL+9SpFSkOaV5MytE7pFN/qTVDFtuIOruE1SL6v17A71jI9bpUIBHn6jJA==} + '@lydell/node-pty-darwin-arm64@1.2.0-beta.15': + resolution: {integrity: sha512-6TSBbzdcLiNTHl1mTuzflqXrkmcC36USVGvERoDgvHk2ItEDaMaFZuAJ1CqPmwYj0DyhCS16TVS8OGK9xZnjyQ==} cpu: [arm64] os: [darwin] - '@lydell/node-pty-darwin-x64@1.2.0-beta.14': - resolution: {integrity: sha512-P77aRx2TzjmlX6D3XUjTEi4rxvjkJA8VIBwUwe23pphg5DKdc9/g5Y+IsN3KX3lmNmKFVTBIbKcNkl+n8Cgwiw==} + '@lydell/node-pty-darwin-x64@1.2.0-beta.15': + resolution: {integrity: sha512-yDT2oqPqYMBScyuk1U9Rg5VKcrbMOD9o9jWYYamDADA3NSbUISroPChrqYRQ74Y7BQtNH4gqYAiWOZRi5uQZ0Q==} cpu: [x64] os: [darwin] - '@lydell/node-pty-linux-arm64@1.2.0-beta.14': - resolution: {integrity: sha512-xZclf3acgWmHi7VMZeVBUJRyJQf78pjCkeBf3ofT/5Xvn5QkRICCZJXtcg1f2lJoCtdF1OWHkeddmJgVDOSv6Q==} + '@lydell/node-pty-linux-arm64@1.2.0-beta.15': + resolution: {integrity: sha512-wkbNF7dYAmtJv+o2+iztVlNwnUB4B0uX0wh/UD+mwMcmE2gNMnW9GChXO7fEE5XJokD0vB5idiHpGegaN+G/sg==} cpu: [arm64] os: [linux] - '@lydell/node-pty-linux-x64@1.2.0-beta.14': - resolution: {integrity: sha512-ijTyPgkECpLkrBqs/uuasaXgjv/lQf+5am19ywF6SQ6PsreHZgT36h2j5cdFTN551KHFEDMl6fCgMPDxEEyqxg==} + '@lydell/node-pty-linux-x64@1.2.0-beta.15': + resolution: {integrity: sha512-+U/5AVvHT6W+8OCYcnJgN0Qgc0ycO3TfD6aaFJHK+WHij797f8gsi5dV1HEO9l6YQmWCD+VL5gaLDhx3mxHwCA==} cpu: [x64] os: [linux] - '@lydell/node-pty-win32-arm64@1.2.0-beta.14': - resolution: {integrity: sha512-yw1R4qPtspu0w2p4YhoYuznfQQsdHrVtQnKVDKYTjyuqzF720JZyIdfTRQ0Fl8ChcNesLIrq1kIBfkDPy7CXgg==} + '@lydell/node-pty-win32-arm64@1.2.0-beta.15': + resolution: {integrity: sha512-pyAk91w7wnnKrD4mrHXtIXRfmzSWV5bEzvRhurXcMCtCc2TJ424ciUskIgWMhAPP6y3KyUnqElj+U6kY3iOt0A==} cpu: [arm64] os: [win32] - '@lydell/node-pty-win32-x64@1.2.0-beta.14': - resolution: {integrity: sha512-aenTbinERVvWgCQkFwqj9SOR+t/1ZVJ8RqMAk6nB9Lh7oiuRCDzVfs0fNhHRw7JtURZ4jG4i51jou0uXg2yrIw==} + '@lydell/node-pty-win32-x64@1.2.0-beta.15': + resolution: {integrity: sha512-2f8twEmDVxZ7drchAXjtevpmSPhFok0avAnzXro4t5gmz0xsPNKkoZvymwtuIS3xo7PzQqZOPQ/YzwEMb7oIzQ==} cpu: [x64] os: [win32] - '@lydell/node-pty@1.2.0-beta.14': - resolution: {integrity: sha512-RjQis46eBwL9xyDvfXqVsNS2JZ5zQQK/QAYsNE5j8sYPTf4/OpG5Ghm92WGn+w4Rsk3LTpj2adpaZM9Cb8rzDA==} + '@lydell/node-pty@1.2.0-beta.15': + resolution: {integrity: sha512-Br8wBxzbxFwdWgk9uQ+rdzE0xfoxOK4QuGH54swhRwc5IxP6H9Y1/bcyazRGvNUs6XkB5qNVkezuKSRxUwZe7A==} '@marijn/find-cluster-break@1.0.3': resolution: {integrity: sha512-FY+MKLBoTsLNJF/eLWaOsXGdz6uh3Iu1axjPf6TUq92IYumcTcXWHoS747JARLkcdlJ/Waiaxc5wQfFO8jC6NA==} - '@matrix-org/matrix-sdk-crypto-nodejs@0.6.1': - resolution: {integrity: sha512-xDulwTJfgHtA0rx/bi8JPc0m/hvImiuixfOoomUQYicBAi59xe8Cqc04K2GLQA+yc6JuqXfg6vLsNSgrStpLhw==} + '@matrix-org/matrix-sdk-crypto-nodejs@0.6.6': + resolution: {integrity: sha512-JlYSjq9Sm/0QoUXfk6C7JppsOG0ESY8BHEIaQgjQ8iQ0GkhvJrhPZbMJmd77/Bgeahd1GENf8896nauf4ximzQ==} engines: {node: '>= 24'} - '@matrix-org/matrix-sdk-crypto-wasm@18.4.0': - resolution: {integrity: sha512-osxkU1DQ+05+anGHapjWyvZqdHUb94Id37gy54mCKn1Cq/D7iGT5oEUEhjp4oTnCLo4TOtI6ULJ/LHsapaIptQ==} + '@matrix-org/matrix-sdk-crypto-wasm@18.5.0': + resolution: {integrity: sha512-E826Hy1rG26LanPjtSsOiVRcVoHfSgPgj2r2Xsb5RPScpaKi9XJADQ0u3dNjRCitZPX4oyLNl1FDd5AfDlmIwQ==} engines: {node: '>= 18'} '@mdx-js/mdx@3.1.1': @@ -3824,29 +4000,26 @@ packages: resolution: {integrity: sha512-EWhz2pKkcPluZHAOI1yneV+JK0NO/3hdh7nABBb0x4PjyUWMeSWPTBAjtIu+BhtMYOqlaijSPZMZ0Hs/J4ZL4A==} engines: {node: '>=18.0.0'} - '@microsoft/teams.api@2.0.14': - resolution: {integrity: sha512-mEHBgs7yklydQWTlfGFok5i7np2WxOKS3j6aMgRH0HVfiLqenPjGm0NAWKR/Hg29n9ODtGZZeuIXNCwIYQ8syA==} + '@microsoft/teams.api@2.0.15': + resolution: {integrity: sha512-KEZs8C6GmWrlT/+x2YODFbyJ3UrkWCEU1SFbk4431hMp6bSgVad+WjB0ysKQWJ/mF+H9F+gAPTvgOgBGuojxmw==} engines: {node: '>=20'} - '@microsoft/teams.apps@2.0.14': - resolution: {integrity: sha512-7re8a3pnAUSD5rAGlWbKQd07XtQJwyuZ4rI7EWyqBQT2iLhqUU1r4jtq3jQFpfov7xhADVV+oExCc7IbNyYuGw==} + '@microsoft/teams.apps@2.0.15': + resolution: {integrity: sha512-ufWcwNACVBu7tkPVpH0LoO9A95JxQxyHJ9kjFzWY4VHdtnR+/niS1vIvDpTZ2AlPd+yWEu/94JPQMskIxThFPQ==} engines: {node: '>=20'} - '@microsoft/teams.cards@2.0.14': - resolution: {integrity: sha512-qrWnjJVgMPO8vvbLEiTeBLrrRLsr4rletQnuP9fPMXTTcrNx+Dh0gYWtQAOBvpoAuFo5tTXR/waNFNUm8IZtBw==} + '@microsoft/teams.cards@2.0.15': + resolution: {integrity: sha512-fmWzBHmhM3++Pl64nbbPWSi1M/sw5Usmnnsea0Wx8G127oaEdrXi7s+uegwyHa6qzssSrluQ/Th2Y2KR2B5xew==} engines: {node: '>=20'} - '@microsoft/teams.common@2.0.14': - resolution: {integrity: sha512-cjf3b/2sr5RqqiOaDuogJQ9fUNRZjDSh9eBEAv6NqkigNNLLjDgEgEl5lLoJsPp4usvc3drwFkx6HayuEbT7vA==} + '@microsoft/teams.common@2.0.15': + resolution: {integrity: sha512-KXQUFXQbFIqzGAGvdCIkfw21t5G7EulAtsD+2SAaB4uPehH6deyL4+D7JmX5ElQ39F+XYtLnsgYs0HCxuoiXeQ==} engines: {node: '>=20'} - '@microsoft/teams.graph@2.0.14': - resolution: {integrity: sha512-PufhROXKhsC/h6ZKuquPzvNBB1Q9lHHu//vZGfRj3yD+hgtQkEz2YzXZDYC3h0bDN4ej2KtvkDGrsovqrnU0cQ==} + '@microsoft/teams.graph@2.0.15': + resolution: {integrity: sha512-f0OUHEGVOZS/zRlKQQa2YqQ6BWun0yYMhjzum2fiIgz+drE/OhwZ/Z3QCgqVppvaXxThdbH9lvXA4DBczBeVng==} engines: {node: '>=20'} - '@minhducsun2002/leb128@1.0.0': - resolution: {integrity: sha512-eFrYUPDVHeuwWHluTG1kwNQUEUcFjVKYwPkU8z9DR1JH3AW7JtJsG9cRVGmwz809kKtGfwGJj58juCZxEvnI/g==} - '@mistralai/mistralai@2.5.0': resolution: {integrity: sha512-S/r6tkiUHblaDJGsb84WS0ePTF2YHVta2EoTi1NJqHNt5mfRRS2uE4v7hCYV134+an+fk6WgG3+aFfinJbQBjQ==} peerDependencies: @@ -3893,8 +4066,8 @@ packages: resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==} engines: {node: '>= 20.19.0'} - '@noble/ciphers@2.2.0': - resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} + '@noble/ciphers@2.3.0': + resolution: {integrity: sha512-Clu/xdfgVTf9o7ngLOURaxePwR0j8sjclKEtVij10/jGulwFsPWCvvRgG/XjUVf8Nei+jLG6uwyXzUTGY1DQrw==} engines: {node: '>= 20.19.0'} '@noble/curves@1.9.7': @@ -3905,8 +4078,8 @@ packages: resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==} engines: {node: '>= 20.19.0'} - '@noble/curves@2.2.0': - resolution: {integrity: sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==} + '@noble/curves@2.3.0': + resolution: {integrity: sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==} engines: {node: '>= 20.19.0'} '@noble/ed25519@3.1.0': @@ -3920,8 +4093,8 @@ packages: resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} engines: {node: '>= 20.19.0'} - '@noble/hashes@2.2.0': - resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + '@noble/hashes@2.3.0': + resolution: {integrity: sha512-oN+QwyX7VSHotibwubG3kpzbwKrfnyR6OOO+3Nk/53ADL7FmgHHz4TgrbaYKvvOw09u6QTx0oiH1cNCIOuN0CQ==} engines: {node: '>= 20.19.0'} '@nodelib/fs.scandir@2.1.5': @@ -3996,13 +4169,13 @@ packages: cpu: [x64] os: [win32] - '@openclaw/crabline@0.1.11': - resolution: {integrity: sha512-A7KH6gi7tXfJmdyeCzhZ65cSrLk4lALbto3lNBOHp1C6uIirAgM4tcF9I7/LhNDX/dq/T+q2QytpVPhhsfwgQQ==} + '@openclaw/crabline@0.1.17': + resolution: {integrity: sha512-tMjpIhzJvCulDA6mYL8nOA6XExWXZoBOrD4XgL3gsNdEDAWY4FCaHYyNCXwKPU2QSs78FU0xZ3NIQRr9ErHRpQ==} engines: {node: '>=22'} hasBin: true - '@openclaw/fs-safe@0.5.5': - resolution: {integrity: sha512-x8wYigrOwmnsE8v4LfAh2eTvvkuDMspBrQeBp/GyB9/c7eFf8aL7gK4keewDbhscKX1pACD8Yd+ehZq6o29xHw==} + '@openclaw/fs-safe@0.5.6': + resolution: {integrity: sha512-0M1vz1PEFAgCwTxhB1lt/B7z+TRTTWmlYJ3dSbdhjZp2AcfM7rXPGjQVJqHXpzpsb9SRxvKGrAM454Uul/Xy5g==} engines: {node: '>=22'} '@openclaw/libterminal@0.3.2': @@ -4014,8 +4187,8 @@ packages: node-pty: optional: true - '@openclaw/proxyline@0.3.4': - resolution: {integrity: sha512-WuLE282PW7vLienDNFTjdSI/BCYDAepvr5siOTYABQhqFo8qbP9MgmJzZnwmskUqiYugGzle6gvaRbJTkwbZ8A==} + '@openclaw/proxyline@0.3.7': + resolution: {integrity: sha512-RWkt4mPcBOj7E8euyeqynkIFXvEIxVStYH0YHDC08feq5qFyBXGmfdWC+MTMVJXfHN2ituoxLlrIyjpyJpW7ew==} engines: {node: '>=22.19.0'} peerDependencies: undici: '>=8.5.0 <9' @@ -4198,12 +4371,12 @@ packages: resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} engines: {node: '>=14'} - '@oxc-project/types@0.139.0': - resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@oxc-project/types@0.140.0': resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} + '@oxc-project/types@0.146.0': + resolution: {integrity: sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==} + '@oxfmt/binding-android-arm-eabi@0.60.0': resolution: {integrity: sha512-1q4q4Jc8FlOMVojEisyFAVyl8h1yawNv6phjgmhGVEDeyeOdsSnSr9x0+D4mOnEKvpO5L4mxKZ/DP9X6U3A/Mw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4356,124 +4529,124 @@ packages: cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.75.0': - resolution: {integrity: sha512-lutovtFzJqlRaqpZrCqSSGaHZzl9nIxxpjLzhSRLunN6dCLylj0uzlCyQGaQDIys7rrv8kVXiFO+R4Zpn0bX7g==} + '@oxlint/binding-android-arm-eabi@1.78.0': + resolution: {integrity: sha512-Bu819lmAfZMUHErrpe0cEWj3iaefuUODHSU8+UbXy67V/r7/7f4K3FL0NmbD85E+wiFLDYuhP8Zlv0XnVeXshw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.75.0': - resolution: {integrity: sha512-hXI0hDgHkw4w5nfru72aG7y+2iQJmC4waH/KV6H/hbgA6yAP5jYNx0P9yug15Hs0tWl/+mda3Jjn/2gmDT48tw==} + '@oxlint/binding-android-arm64@1.78.0': + resolution: {integrity: sha512-CDfxZgB61B7buRdY2FJoAYYPPXCZ1EoC1LKscnC5dg3kjobdxiconvAvvN1BmHyW4PyFT3jRLDag/BY/roSNBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.75.0': - resolution: {integrity: sha512-D91BWbK/dMYfCcrghspPIuKs2D9LF4Z/OabVSQjw1AO6PWxArD7teDA48bm0ySFqWDaPVqmQRl5GMWNglTXyrQ==} + '@oxlint/binding-darwin-arm64@1.78.0': + resolution: {integrity: sha512-2Y2U9Ahrz+OO0Ej88f9SJYq51/jUBp1Mc7iZu0ukrbeeZ3gpRGfzIFnoqfHDY96xr0GEfNrPUBFEy0nN5aD7HA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.75.0': - resolution: {integrity: sha512-02mpwzf12BonZ6PT0TuQoomvEh2kVl2WGBIKWezCyToIS+rYkQZ6GXnARBAl9A4Ovm2V+Xe7M4KretyqmmcnJQ==} + '@oxlint/binding-darwin-x64@1.78.0': + resolution: {integrity: sha512-rpych6eJq6m9jDRypTEaPD1xysaEW5h9+xuxhGK/QhOg+/xaqPZrCrTNoIl/f3nEjuJeCEmstNDlrE9rJi/3/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.75.0': - resolution: {integrity: sha512-qZJgLnDaBsiL5YESx2t/TZ8eXkL9fEkKoXEdzegROhlz9A0lgyGnZ0dAzJrh7LJAHQl2K9RdRueN2s/9N7+odg==} + '@oxlint/binding-freebsd-x64@1.78.0': + resolution: {integrity: sha512-IcMGrQT3QizkOESUJd5et+rOhVqSkNDfNik1cvrKDqIbzqx9KMtRswpFgkCuNTSwylCFLKhGUu8KmqY1ZnC0Dg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.75.0': - resolution: {integrity: sha512-7XlaWA5BJD3XpCfrEqjEe6Zseeb14S7QGa304XfwKignRaKQ+eIj775BQ7nIslggWickl4IsPUFqJ+/gAyNHVg==} + '@oxlint/binding-linux-arm-gnueabihf@1.78.0': + resolution: {integrity: sha512-/uLdoJ0IXE6vo/0f0LKjinQAp+re+VMaCWaNT8ENIv2EOCkSsc8SGaflXAuW0Jua2dq5+GLVWm1NQK7P3UFSNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.75.0': - resolution: {integrity: sha512-av6Tpv8yrcMMMOadOqENBhlsLRcGFXXwoQ0hzHhsmS9FJ4Wioy8we427GbcMe2XTxmL2e60T67H1Dyr3up+tAA==} + '@oxlint/binding-linux-arm-musleabihf@1.78.0': + resolution: {integrity: sha512-7xi4Wb/O8NRJhLoUXmDJMUVpNYvB5kefdhFU1Jb8rtae4QoXlTiLwI14X4YvAXVZLNZChP8m5qO9SQAlWQTbkQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.75.0': - resolution: {integrity: sha512-WcUhd8fHT5plrA14lANevl+hOl815mVI5t2hU21oFWrZKFXIVV/Sr4rWQV0NzSvzBupbMLNc5ErEA6Ehxh5jMg==} + '@oxlint/binding-linux-arm64-gnu@1.78.0': + resolution: {integrity: sha512-4hFW0+fVXa3OIh1Y4A5SPkmvI4wuuBSrCVKzOyE7PTjhc7yEqZ1pmvEEeS5Lj/MaqvegFxXyF33N+6jkehxdyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.75.0': - resolution: {integrity: sha512-UWzp5wRHFe/ESO3+eEaxXsTkYTGLYjnTsi/I5neEacXSItQ6WNleapfOAeA4x2b8nyhJ4uQxqvtv9pHv8kWJtQ==} + '@oxlint/binding-linux-arm64-musl@1.78.0': + resolution: {integrity: sha512-oC0mvsgBJjlMijSDEhx9KuvR9zYeHXceA9MjbuXB1F8NSR78Yj2unOBrstEvTVaq+pko+kuue6DajC00eqvTdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.75.0': - resolution: {integrity: sha512-XEVRwGMLKCUKrvhLAz4F6AIh8MJrQVdSZtAmPpRZt9tGPsUnamPOcl3dS/ZQzJnar/Ymgc//+xho0L60Emzuxg==} + '@oxlint/binding-linux-ppc64-gnu@1.78.0': + resolution: {integrity: sha512-XAllT5SUZS+ohjuZ3/5S0cwe0r7eboiuigeStCZ5DXRYx/2KVM2UvQXvAfyzXEimtQjAB7cDQ2YxDe2Zl2WNQQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.75.0': - resolution: {integrity: sha512-mAG4DUXqfLC8cTjMD2kt3jDmVzFREYtDyeLNdLdsCcBc4Zbl2EMuiFektGBilQwkNjYnMvCqJs55U+Hyb+b+jw==} + '@oxlint/binding-linux-riscv64-gnu@1.78.0': + resolution: {integrity: sha512-trucMER/0QtecoXvc1y/UVqE3kwJipDwrx4oHfj+nNm3dq2zjP44WT0CfHNDPM3G1DXIkx/gY6lAD21NSCZVhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.75.0': - resolution: {integrity: sha512-95hrAvriAlI+pekSomTFIn0+bawMDlDwTNVmdjsFusTHyL2JWh7TWvRNG/Lkim72uN8OiCcO9wcaC6omLP5E3w==} + '@oxlint/binding-linux-riscv64-musl@1.78.0': + resolution: {integrity: sha512-cm3O4F/HQbdzOUX5mKHqG5KDL6E5w0pnlZ+fbBy2rmLryPOowkuLagFHTopQsEIpjcaZoPOrL+BmmAytAG9HFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.75.0': - resolution: {integrity: sha512-4b6f2+FrtruAESrCqIKcrarzfrSx+wk2QNcp+RT91/Prc+pMQMAfyZ1rG1c3tFQNl8Bc616tx40uNXyxNBRPbQ==} + '@oxlint/binding-linux-s390x-gnu@1.78.0': + resolution: {integrity: sha512-33wRf6HqGNsybJ3qX4cGaQN2ODPxNmc1rMa0mrTmx3eFq1VzOnvQooi9bIGVYakW8a/wmqVx1mgsUm8R2xfTiw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.75.0': - resolution: {integrity: sha512-nshAhrUvXFUWOvqQ2soIw7HFNWvpvEV4o0cYSqPtzLiPF5gKyYTDOOTJ6Rn8g8K/iGvPIrbDA4v8+5MvnjJrrg==} + '@oxlint/binding-linux-x64-gnu@1.78.0': + resolution: {integrity: sha512-rRdISSYegj6VganMZ9tjRjijowfHJ09IZU01i0toBAqr6n5LEtwHq2IeS4FjW2RoskOHlb6efB26H5izYb3GEQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.75.0': - resolution: {integrity: sha512-e4jNxLKnxLC6sYBQRxrI2pgIIxnmMtF8U/VwNYcjTT/CLS+spH624cYVnj07bTKwaEWT37/e025isOs6j/0xqA==} + '@oxlint/binding-linux-x64-musl@1.78.0': + resolution: {integrity: sha512-GmsP4rW0xTL6u5CVdcDsaN5Fbc7hBc382Wmar1kttbnwSEviM+rSINKOMQ+UQ6iH+AGwC+8gaAiwu134Tgh6Lg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.75.0': - resolution: {integrity: sha512-hZ2lH+1qLf/DiEP9UWuQTK2JWj/BgvMB4jhIV4SmNU1wfEiYYX4TynQyAZXx0j9X4qRYizAL042SKaV+8ynh4w==} + '@oxlint/binding-openharmony-arm64@1.78.0': + resolution: {integrity: sha512-sy9yeYuADc8a+n4TLBayzMCZiHPW78DcIFVpOXTmdKHWQeM9xe5uzkqIIZmi326D5hY9XVwacipEB1p7tQjPAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.75.0': - resolution: {integrity: sha512-Ilj6PNzGDS3bCU0MSJH7Msh0NhH+T/mRp2shwg+q+GHeVlPwP5LEboW96aW+3kVKFk6zYZy1Xi5pZkqZh6X8KQ==} + '@oxlint/binding-win32-arm64-msvc@1.78.0': + resolution: {integrity: sha512-rjc2hF1KfMi8fZj1X/m3AmnHbdsF3rL0v6KQg0Uc880Yb2khjz+3U14sfdZ7jWTpRnN1m1NQa/TT7uU9lJWPrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.75.0': - resolution: {integrity: sha512-QVit2nOEOiPhkmsrksPSkoGCdnZRNkspt8fwoYyP09te1VEbnSj4LAxua4rc8FKTmWkySVe05j8iz9GXYfF1AQ==} + '@oxlint/binding-win32-ia32-msvc@1.78.0': + resolution: {integrity: sha512-zcuXFVrEFHIafRfkCQT8w/Xe41o07ozl/vwHq7p94vB29xVzsB0sZGYORU1jhcYKv3Lr0J3HbJ2T4fHH5rWmvA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.75.0': - resolution: {integrity: sha512-DSxnNkBUAYARPwJtR12Ig3deWr8w0H997xP6jy33i+e0SyYJw8FKuz4+cZtpmPEhQmvlPJE3X/2vNxDmLkd/rA==} + '@oxlint/binding-win32-x64-msvc@1.78.0': + resolution: {integrity: sha512-Sb5ocmLSuYeOuXd+CFOToGKp/gjXUEWDnvIGwhnh8aq8wY4TMmEnKnvbogSW7RdMZv77JSARduS7/gv+khYEjA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -4521,20 +4694,20 @@ packages: resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} engines: {node: '>=20.0.0'} - '@pierre/diffs@1.2.12': - resolution: {integrity: sha512-pY/gmgWL03WnagqCyCnBi3QtRXUv4hCIY6FYqd5b1ZGaoI6a4Bsji8j+yRl2RfzPh/8Hf19rCl1GE80G6a1cLQ==} + '@pierre/diffs@1.3.5': + resolution: {integrity: sha512-BhaLEiUvR+BdIyOYdogA4JLQjluWPubuwySmmIqEkcE0FwIWRbgJgHNC/r884dlxEr89fO4hTk/sBln0a7NSOw==} peerDependencies: react: ^18.3.1 || ^19.0.0 react-dom: ^18.3.1 || ^19.0.0 - '@pierre/theme@1.1.0': - resolution: {integrity: sha512-GC2OWTAfTIIWWYhPCygwG8t2EtePQkRfON4MI2rwIkJylmiyqIttJID2dCL8sUD8cNdEvYkEyfEHHKMeCiDLoQ==} + '@pierre/theme@2.0.0': + resolution: {integrity: sha512-yNDd9GYLQl1mEUJR8AneJ5e4ohLIHQd/wZLWr4fagt78vS2RwwZNW530vVgHqXFAyFVcFlRmGUD5ramXH46OXw==} engines: {vscode: ^1.0.0} - '@pierre/theming@0.0.2': - resolution: {integrity: sha512-QM1M4stXfnzfaE8I8YbjXSApV8c+2dBsXJj8eYg9WTpBR/cTmCZIcfGnN4p13iRrYu2Br/R/OJfEL7uR8Qjctw==} + '@pierre/theming@1.0.1': + resolution: {integrity: sha512-WCI5Qd7iprDpISL9fBYOLe8RV53+b7mFNA3bPzl60/2CKCSrsKN8zEcep6Y3BAzvARlmca50zGjDodqPGiTUKA==} peerDependencies: - '@pierre/theme': ^1.1.0 + '@pierre/theme': ^1.1.0 || ^2.0.0 '@shikijs/themes': ^3.0.0 || ^4.0.0 react: ^18.3.1 || ^19.0.0 react-dom: ^18.3.1 || ^19.0.0 @@ -4563,10 +4736,10 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.1.5': - resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + '@rolldown/binding-android-arm-eabi@1.2.5': + resolution: {integrity: sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [arm] os: [android] '@rolldown/binding-android-arm64@1.2.0': @@ -4575,11 +4748,11 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.1.5': - resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + '@rolldown/binding-android-arm64@1.2.5': + resolution: {integrity: sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [darwin] + os: [android] '@rolldown/binding-darwin-arm64@1.2.0': resolution: {integrity: sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==} @@ -4587,10 +4760,10 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.5': - resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + '@rolldown/binding-darwin-arm64@1.2.5': + resolution: {integrity: sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [arm64] os: [darwin] '@rolldown/binding-darwin-x64@1.2.0': @@ -4599,11 +4772,11 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.5': - resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + '@rolldown/binding-darwin-x64@1.2.5': + resolution: {integrity: sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] - os: [freebsd] + os: [darwin] '@rolldown/binding-freebsd-x64@1.2.0': resolution: {integrity: sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==} @@ -4611,11 +4784,11 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': - resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + '@rolldown/binding-freebsd-x64@1.2.5': + resolution: {integrity: sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] + cpu: [x64] + os: [freebsd] '@rolldown/binding-linux-arm-gnueabihf@1.2.0': resolution: {integrity: sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==} @@ -4623,12 +4796,11 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.5': - resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.5': + resolution: {integrity: sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [arm] os: [linux] - libc: [glibc] '@rolldown/binding-linux-arm64-gnu@1.2.0': resolution: {integrity: sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==} @@ -4637,12 +4809,12 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.5': - resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + '@rolldown/binding-linux-arm64-gnu@1.2.5': + resolution: {integrity: sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.2.0': resolution: {integrity: sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==} @@ -4651,12 +4823,12 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.5': - resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + '@rolldown/binding-linux-arm64-musl@1.2.5': + resolution: {integrity: sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] + cpu: [arm64] os: [linux] - libc: [glibc] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.2.0': resolution: {integrity: sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==} @@ -4665,10 +4837,10 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.1.5': - resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + '@rolldown/binding-linux-ppc64-gnu@1.2.5': + resolution: {integrity: sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + cpu: [ppc64] os: [linux] libc: [glibc] @@ -4679,10 +4851,10 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.1.5': - resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + '@rolldown/binding-linux-s390x-gnu@1.2.5': + resolution: {integrity: sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [s390x] os: [linux] libc: [glibc] @@ -4693,12 +4865,12 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.5': - resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + '@rolldown/binding-linux-x64-gnu@1.2.5': + resolution: {integrity: sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.2.0': resolution: {integrity: sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==} @@ -4707,11 +4879,12 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.5': - resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + '@rolldown/binding-linux-x64-musl@1.2.5': + resolution: {integrity: sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] + cpu: [x64] + os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.2.0': resolution: {integrity: sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==} @@ -4719,32 +4892,27 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.5': - resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} + '@rolldown/binding-openharmony-arm64@1.2.5': + resolution: {integrity: sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] + cpu: [arm64] + os: [openharmony] '@rolldown/binding-wasm32-wasi@1.2.0': resolution: {integrity: sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.1.5': - resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.0': resolution: {integrity: sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.5': - resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + '@rolldown/binding-win32-arm64-msvc@1.2.5': + resolution: {integrity: sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [arm64] os: [win32] '@rolldown/binding-win32-x64-msvc@1.2.0': @@ -4753,6 +4921,12 @@ packages: cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.2.5': + resolution: {integrity: sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -4772,26 +4946,50 @@ packages: resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==} engines: {node: '>=20'} + '@shikijs/core@4.4.3': + resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==} + engines: {node: '>=20'} + '@shikijs/engine-javascript@4.3.1': resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==} engines: {node: '>=20'} + '@shikijs/engine-javascript@4.4.3': + resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==} + engines: {node: '>=20'} + '@shikijs/engine-oniguruma@4.3.1': resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==} engines: {node: '>=20'} + '@shikijs/engine-oniguruma@4.4.3': + resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==} + engines: {node: '>=20'} + '@shikijs/langs@4.3.1': resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==} engines: {node: '>=20'} + '@shikijs/langs@4.4.3': + resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==} + engines: {node: '>=20'} + '@shikijs/primitive@4.3.1': resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==} engines: {node: '>=20'} + '@shikijs/primitive@4.4.3': + resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==} + engines: {node: '>=20'} + '@shikijs/themes@4.3.1': resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==} engines: {node: '>=20'} + '@shikijs/themes@4.4.3': + resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} + engines: {node: '>=20'} + '@shikijs/transformers@4.3.1': resolution: {integrity: sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A==} engines: {node: '>=20'} @@ -4800,6 +4998,10 @@ packages: resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==} engines: {node: '>=20'} + '@shikijs/types@4.4.3': + resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} + engines: {node: '>=20'} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -4807,9 +5009,6 @@ packages: resolution: {integrity: sha512-7HDb/fQAop2bCmvDIzU5+69i+UJaFgIVp99h1VzK1mpg1JwSODOkjbqD7ilTYnqlnadF8C4XjpwpepxDsGY6+w==} engines: {node: '>=6'} - '@shinyoshiaki/jspack@0.0.6': - resolution: {integrity: sha512-SdsNhLjQh4onBlyPrn4ia1Pdx5bXT88G/LIEpOYAjx2u4xeY/m/HB5yHqlkJB1uQR3Zw4R3hBWLj46STRAN0rg==} - '@shoelace-style/animations@1.2.0': resolution: {integrity: sha512-avvo1xxkLbv2dgtabdewBbqcJfV0e0zCwFqkPMnHFGbJbBHorRFfMAHh1NG9ymmXn0jW95ibUVH03E1NYXD6Gw==} @@ -4865,7 +5064,7 @@ packages: resolution: {integrity: sha512-QShO60SB0E+HH+TbcKj3CBEQbodToRyiXnxuSB4t1kvUlqEmuGA1nOOjrRDkDJbOECAZ13PLe4ek9SrntpfoYg==} engines: {node: '>=20', npm: '>=9.6.4'} peerDependencies: - undici: 7.29.0 + undici: ^7.0.0 '@slack/types@3.0.0': resolution: {integrity: sha512-KNOqpnNAlsFt5Jk9XBclslQ0lobRIg/0tnhpmvZJAglHJx9E8oceN8hC3gaBzkR6UzQ9Wzq4rLsJ98wUcxWPfw==} @@ -4883,14 +5082,26 @@ packages: resolution: {integrity: sha512-dl2yRglDxfzH9uJ4fSo4zTaAHa0zH7+V7BZMRWy8hEYIKT1BiqMUK/CN6T3ADQ3kbA5N1tmUulroJ2UtONS7Kw==} engines: {node: '>=18.0.0'} + '@smithy/core@3.33.3': + resolution: {integrity: sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.4.14': resolution: {integrity: sha512-QgbuahIb2qxQeZQvNK0sw3aF3JH5zwH8j2lLp5DUasVXexGGMWULAR+7z0omPXFolCP/m5wN9M5lm9EGdSviTQ==} engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.5.2': + resolution: {integrity: sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==} + engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.6.11': resolution: {integrity: sha512-o0Zkj1nKqJAoq+a+BrkhU39tRftMNjLwpc/z06Frfl43wpbHrJMaSAVZE4vTqlxtVkNaGaT0bIDxOp7tkFTuQQ==} engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.7.2': + resolution: {integrity: sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw==} + engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.4.14': resolution: {integrity: sha512-kd+H/Vmy6RHGU1m4SSyZ2BaMbPwPcAAX1zmQ5sI1Ljug4oGKYCVjbkPo3yqbUlzvGhogF/TtwSnwCDwlflYUlg==} engines: {node: '>=18.0.0'} @@ -4903,26 +5114,38 @@ packages: resolution: {integrity: sha512-6iv9dLiDX4he0KLFr2vw2u98Q+lIEsF0G+1MZVy5kWjZRLYXvY6S4uJ+R3aC4xYBkjljAtCB3uG9Y8pBL3O3Ug==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.9.11': - resolution: {integrity: sha512-slbzbz8taEOzoXv/9y34YNBoE+ZHmddLykCgjDAjvMAsu2nM5s2Gzwa5OGF721tD8s+CKeFUBds5lSj9lcbuDg==} + '@smithy/node-http-handler@4.11.2': + resolution: {integrity: sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.11.3': + resolution: {integrity: sha512-2jY1tSpERfPfWqyBV2pH+iGFaghVsIJszJNsT7hxtQYhVJpWDyc0LqOWI+nXOxOAHaEfZ4PXXtp1wW1TGpHhkA==} engines: {node: '>=18.0.0'} '@smithy/protocol-http@5.5.14': resolution: {integrity: sha512-R+aYfS8kDXMwO+LfpiWTJjjUsR+se4cd2ZBjMU3fqJmoSZ1jenTpgb4/k1SvvXcM9f0232KvufZoO5XRWoiPBw==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.6.14': - resolution: {integrity: sha512-/rg/ksfMpLzG9fK67n+98OsyFHME7j6jW/3NwIRVTv2C5YAbHQUFxutBnmq7rWFoB2qojDShgTv+i1JeGXJS6A==} + '@smithy/shared-ini-file-loader@4.7.2': + resolution: {integrity: sha512-XsIDj5gVG4YRxGS4n4TiBDAogPWRHXKZyor6JW/sEuaa/7BvKADe9j45jI2dPYCnYbKkLBmbZ4qN9ns0sH+kMQ==} engines: {node: '>=18.0.0'} '@smithy/signature-v4@5.6.10': resolution: {integrity: sha512-EXhWePm3SXJAX38npIy4TXL2Aex/OVgCClTjelN2QHw/U+8CQUH8C7AaxsVzQcYieYPseywn48s89DmvuGjiAg==} engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.7.3': + resolution: {integrity: sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.16.1': resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} engines: {node: '>=18.0.0'} + '@smithy/types@4.17.2': + resolution: {integrity: sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA==} + engines: {node: '>=18.0.0'} + '@snazzah/davey-android-arm-eabi@0.1.12': resolution: {integrity: sha512-6VC/an+Sx5dI5skb+90rYcIB1jhm48Rl0nDaw0UNT4bz1rMjpVfmmZqeocYXMq96IdbBMlE6OTKGcBm2C3gkQg==} engines: {node: '>= 10'} @@ -5039,32 +5262,32 @@ packages: resolution: {integrity: sha512-a7Lv/G0La5eTNUEIyLldpeYziyFSj3rOlWNeXFu8v+ZSb8w8EnQ/L0r0sKHux7Ru6RhUkAXrcaHU7xd1ZkWovA==} engines: {node: '>=18'} - '@tloncorp/tlon-skill-darwin-arm64@0.4.5': - resolution: {integrity: sha512-urM3HnsoQR/yqT8qxs4DZu/B6bWS0EdNKcJXme5FdTsuX4NfOhbMAdjl+aasu2G86GF3q/fgH00g75DNiIFB9w==} + '@tloncorp/tlon-skill-darwin-arm64@0.5.0': + resolution: {integrity: sha512-txGmGHXAkiMIo2uCoXAvG6V+SEpfhaeU4CU8vLM9digZ7ZWkQFgtbiZvRQJ/zjNB63wwPhR8YXyd9oKhkq0jfg==} cpu: [arm64] os: [darwin] hasBin: true - '@tloncorp/tlon-skill-darwin-x64@0.4.5': - resolution: {integrity: sha512-w+pr1NwiD6524WAIHwpQ0IjtqV1K7SUw2aqaG27lvluPukzolYWl3fcliJzY2AOeCwe2r3JkCq5JD1oiZGkLjQ==} + '@tloncorp/tlon-skill-darwin-x64@0.5.0': + resolution: {integrity: sha512-1eWvhgyQftMj/KTYFVp3lRAa2ymgTttmTqmFm9Kdi8o3iFJtEGXV+Wg+Rev+6COtEQWI59CUG3k4PO57bc+lcA==} cpu: [x64] os: [darwin] hasBin: true - '@tloncorp/tlon-skill-linux-arm64@0.4.5': - resolution: {integrity: sha512-t/N4nUF2abzQA22ONbjSdOEyQ0k6nWaA/wZ3OZ0Gzmsfa4caEbMwiHS/nY9po9p3Gb8IFXW7ZTMwMe7w2E3XlA==} + '@tloncorp/tlon-skill-linux-arm64@0.5.0': + resolution: {integrity: sha512-LaasnwwKtkMAkjl6iIMBBXi+H+gASHySCswTqW8yxHtoV8hjOPy+dss460n16EkxPiIZSfD6+HaFPxkekJKXXg==} cpu: [arm64] os: [linux] hasBin: true - '@tloncorp/tlon-skill-linux-x64@0.4.5': - resolution: {integrity: sha512-1u5cdmnjSeYGhgTSMTDrpenPOxCu7B5Q62cuviBeYaS7lvvNTNwynIwuO9QR3Q98r7rMMyzWExhDHJ+sRlSbsw==} + '@tloncorp/tlon-skill-linux-x64@0.5.0': + resolution: {integrity: sha512-7cfCrblVeE7m88wjYvTKJsiXdBdfU9J1QQ+fgBNZCQ6UuyWCm3uNg8/lL7QcEdgRByX21apvdt/N+70kVa8NUA==} cpu: [x64] os: [linux] hasBin: true - '@tloncorp/tlon-skill@0.4.5': - resolution: {integrity: sha512-rsQ4Qqm1oCGLz7rW/TFyVc+8KANifGNrY8jTEu4AbIgFfGR9m3I8tdRjSdAkVW7ZCZ7VDI/RlZhCN8s/dNz+Kw==} + '@tloncorp/tlon-skill@0.5.0': + resolution: {integrity: sha512-pEmkh36eWEhnj02q/DR6vdqLsYVKaRPKUD7vWFWZFSMhBKgfwknjselGQIE+0Nu5QoDSIkStRwhNGK6bTwT6IQ==} hasBin: true '@tokenizer/inflate@0.4.1': @@ -5074,40 +5297,40 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@trycua/cua-driver-darwin-arm64@0.19.3': - resolution: {integrity: sha512-zd37WTn8JP3ixXiMN4BjhYsN5o/+TsF/UTD4YTEtapYqTiw1DcQxuwZhXQDtvrmQYfaPjOgwlDib1vZ584UBIA==} + '@trycua/cua-driver-darwin-arm64@0.20.0': + resolution: {integrity: sha512-LiEZ3Mku2BI83UJD7MWNoGw+PYIyo6hfmqA5T3zWle7Rti3Jhvic+Tnu+KZ9i+HXBZEQ84GUR91S+zUTdchh+Q==} cpu: [arm64] os: [darwin] - '@trycua/cua-driver-darwin-x64@0.19.3': - resolution: {integrity: sha512-Z1jTJ9IImfR6njGu79DHe5JCuvximAUbqlpi+RmcXHVmkW8R6Ht7lhnAvOT58pa3FEiyY6zIDouZyxePxX950A==} + '@trycua/cua-driver-darwin-x64@0.20.0': + resolution: {integrity: sha512-4T2+qPYvW8ZUi6XYJM9r6mjfllw3zyEZUUdYvy9Q1WQA6HjcY4mXhXFlEfLjWE0wOeXYrNEXJ8JyYEL0jlzmtw==} cpu: [x64] os: [darwin] - '@trycua/cua-driver-linux-arm64-gnu@0.19.3': - resolution: {integrity: sha512-Q0pDIpg0TNbLQmi8mIdgeBrfcvSq0vJYLQu20E0DBTiAQz+hhx2uvPjNbOadQXJgEnnEs7RUgO5g+mJ5SZpQ3A==} + '@trycua/cua-driver-linux-arm64-gnu@0.20.0': + resolution: {integrity: sha512-ya4Cc3ZO1x3HvCIAcouvVnhWDP5f7ZDWczeG1ym3qWST02AP5EtWXrqoPxRKbTV7y/yqovPO/Bk3mG+3F92AoA==} cpu: [arm64] os: [linux] libc: [glibc] - '@trycua/cua-driver-linux-x64-gnu@0.19.3': - resolution: {integrity: sha512-knUIsm9k5DlUOx8cTDOTwN2GQHyDvAsNqETdVpKOpTakut5FO4OHgabjlPw+q37TkZxPaKntaY6OBjCNlezgvA==} + '@trycua/cua-driver-linux-x64-gnu@0.20.0': + resolution: {integrity: sha512-NjCt19AoCTqe148FdNAK6DmYEuFz9oW+/zh0OzCpfrGNvOvqnOkBT5wVFl7NFQIaNIlERV9f3+SG0Z6eL2QBkA==} cpu: [x64] os: [linux] libc: [glibc] - '@trycua/cua-driver-win32-arm64-msvc@0.19.3': - resolution: {integrity: sha512-SEyYNfDXsgbOzH9z0mEqgMrrSkfEveB8C8SRemfujXvhnvtx8CfzGz+BPYKqLGo9tA9JxJwX4jfM8J41XOR8/g==} + '@trycua/cua-driver-win32-arm64-msvc@0.20.0': + resolution: {integrity: sha512-16a1berZU8BdIA5NDg7ZWM+6r+LTTrOUcS3inUfPeWTxYiqlYhLthDVKR4PZCJhkx+w07ySSviS5O47XQx/M9A==} cpu: [arm64] os: [win32] - '@trycua/cua-driver-win32-x64-msvc@0.19.3': - resolution: {integrity: sha512-an3KaK/6HxB6LnHJ1uYv3ZBpZl3v0jukEOHPXzWifk3Zml14pKtTMbTuEnkr4I07c6BJumzXJ7gOTOZYcuMX7g==} + '@trycua/cua-driver-win32-x64-msvc@0.20.0': + resolution: {integrity: sha512-COOfQZJIcbhWSrfvcT98F7TFbdmwMqqP9AUQIzvPo82VxzXb/nG2KrZohinelR5dAdJ6YBGRw8hIMW/QsgTp9g==} cpu: [x64] os: [win32] - '@trycua/cua-driver@0.19.3': - resolution: {integrity: sha512-Oc/FsGP56kpKn4TcADELcEUkLDCby+Wglt+5dX6r4QJbESWvRPdPJ09wvFPmIQeJ7dAUEnrIjuQt4Kz/LIQN3Q==} + '@trycua/cua-driver@0.20.0': + resolution: {integrity: sha512-PYNA9zbZX46LLObcPSNUm37tIlP0/klphRaSyuJPA3NdaaLiglfw3HcWM/C0wB2KTb8nIS17hb2qCxB8F1VC4Q==} '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} @@ -5185,9 +5408,6 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/jsesc@2.5.1': - resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} - '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} @@ -5233,6 +5453,9 @@ packages: '@types/node@26.1.2': resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + '@types/node@26.2.0': + resolution: {integrity: sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==} + '@types/qs@6.15.1': resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} @@ -5245,8 +5468,8 @@ packages: '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/semver@7.7.1': - resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/semver@7.8.0': + resolution: {integrity: sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==} '@types/send@1.2.1': resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} @@ -5319,126 +5542,6 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - '@typescript/typescript-aix-ppc64@7.0.2': - resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} - engines: {node: '>=16.20.0'} - cpu: [ppc64] - os: [aix] - - '@typescript/typescript-darwin-arm64@7.0.2': - resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [darwin] - - '@typescript/typescript-darwin-x64@7.0.2': - resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [darwin] - - '@typescript/typescript-freebsd-arm64@7.0.2': - resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [freebsd] - - '@typescript/typescript-freebsd-x64@7.0.2': - resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [freebsd] - - '@typescript/typescript-linux-arm64@7.0.2': - resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [linux] - - '@typescript/typescript-linux-arm@7.0.2': - resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} - engines: {node: '>=16.20.0'} - cpu: [arm] - os: [linux] - - '@typescript/typescript-linux-loong64@7.0.2': - resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} - engines: {node: '>=16.20.0'} - cpu: [loong64] - os: [linux] - - '@typescript/typescript-linux-mips64el@7.0.2': - resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} - engines: {node: '>=16.20.0'} - cpu: [mips64el] - os: [linux] - - '@typescript/typescript-linux-ppc64@7.0.2': - resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} - engines: {node: '>=16.20.0'} - cpu: [ppc64] - os: [linux] - - '@typescript/typescript-linux-riscv64@7.0.2': - resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} - engines: {node: '>=16.20.0'} - cpu: [riscv64] - os: [linux] - - '@typescript/typescript-linux-s390x@7.0.2': - resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} - engines: {node: '>=16.20.0'} - cpu: [s390x] - os: [linux] - - '@typescript/typescript-linux-x64@7.0.2': - resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [linux] - - '@typescript/typescript-netbsd-arm64@7.0.2': - resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [netbsd] - - '@typescript/typescript-netbsd-x64@7.0.2': - resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [netbsd] - - '@typescript/typescript-openbsd-arm64@7.0.2': - resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [openbsd] - - '@typescript/typescript-openbsd-x64@7.0.2': - resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [openbsd] - - '@typescript/typescript-sunos-x64@7.0.2': - resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [sunos] - - '@typescript/typescript-win32-arm64@7.0.2': - resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} - engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [win32] - - '@typescript/typescript-win32-x64@7.0.2': - resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} - engines: {node: '>=16.20.0'} - cpu: [x64] - os: [win32] - '@typespec/ts-http-runtime@0.3.7': resolution: {integrity: sha512-JVUD8X2tfDMWjcjLs4yVxxVrS8yR5vnh386GAXT9Qj79nBxxXSaHFQZg5FweLmT8HlPQ3kii6noUB+Z9RN7DvQ==} engines: {node: '>=22.0.0'} @@ -5564,6 +5667,141 @@ packages: '@wasm-audio-decoders/opus-ml@0.0.2': resolution: {integrity: sha512-58rWEqDGg+CKCyEeKm2KoxxSwTWtHh/NLTW9ObR4K8CGF6VwuuGudEI1CtniS/oSRmL1nJq/eh8MKARiluw4DQ==} + '@yuku-codegen/binding-android-arm64@0.8.7': + resolution: {integrity: sha512-C/0zV5IhgVdYhGJTwrY0v8dknxlhiKwtVJkMUaexu9/QvRmzlV4vfU3hZlUSgqc2BxQHntL1mCVbDq8j0FRFDw==} + cpu: [arm64] + os: [android] + + '@yuku-codegen/binding-darwin-arm64@0.8.7': + resolution: {integrity: sha512-/u+REDMI4a0/lsJXTM4c53/w31OGZLOReZIyg62uhgLs0kc8NHsj/nOcxTdlQjq5gi0zhdkccD9LaLTXcdzPvw==} + cpu: [arm64] + os: [darwin] + + '@yuku-codegen/binding-darwin-x64@0.8.7': + resolution: {integrity: sha512-sMMzFOwCo4WXR+/6zIBThOocSC50iIIZZdfiIDbaLvj0Ax/rWt/iavyfEAqajyvzydLyCqR/ZItdLWSRlu1umw==} + cpu: [x64] + os: [darwin] + + '@yuku-codegen/binding-freebsd-x64@0.8.7': + resolution: {integrity: sha512-MpdpKXix9P+Y1rKgjvcNeNtGjXeL1CmttNhYINrWls8kRpm4xM/oBGTmn6w7to8lAlwj5jm8q03dQPl5mRv4Qw==} + cpu: [x64] + os: [freebsd] + + '@yuku-codegen/binding-linux-arm-gnu@0.8.7': + resolution: {integrity: sha512-rr1srFLlPAmC1vtxfc9C1YLDe3iH09YjfSeeIidBqKhzx1MATjOAq4mjlRUOnhr/L27MotWIYOFKwVsd5JZFOg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-codegen/binding-linux-arm-musl@0.8.7': + resolution: {integrity: sha512-eAufXh8qBRpiSO6ueaMDL+yyoXIGLhpUce72YbcACtZU2qhExwBIJyEtQf5kH2Ki0X2aqkSjSfog4OPtKXan3Q==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-codegen/binding-linux-arm64-gnu@0.8.7': + resolution: {integrity: sha512-gw4w6wPoHObBrdIC4duVWLmJOvpdE25j5D7yrM5mACNlK4klRz/lv8hK+ssQk9EJHBgZjSaqZIJVFgqNYbfv7A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-codegen/binding-linux-arm64-musl@0.8.7': + resolution: {integrity: sha512-L68N6Y4XkqcIaKo3Ra88JEvBEH4AHff44A4INcrxeVWZ8CZtu2tCpfVxe3hR8qQQMcvBSQlDn24KpkCKEhVvfA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-codegen/binding-linux-x64-gnu@0.8.7': + resolution: {integrity: sha512-dzyAbltJmf3Cqlb8HcFuYIf5Yn0fl1vTr3XJ9HiVNNvOlhqPSArOqtw9vI1p6/VTXTjrMLXlU+s+/kNHiIy/Cw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-codegen/binding-linux-x64-musl@0.8.7': + resolution: {integrity: sha512-Otw4MH3404q0Bbvl+YTdW9aoUV5vXmUw8260bWvt1XlaoIX/ceSgI4ygheRDMfBPoHt6FDayQaO9OLVUZAgkFA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-codegen/binding-win32-arm64@0.8.7': + resolution: {integrity: sha512-qo/jyrzryiBuKEsFiuWaBCBe3tRMynQ0qFWFgOEjcCMQeZfBm+wKiVEUEFXXLc7bh8YezguAWp0Mtnhq4ARNyA==} + cpu: [arm64] + os: [win32] + + '@yuku-codegen/binding-win32-x64@0.8.7': + resolution: {integrity: sha512-D5lDsVDx6m00E6bWySlWdH72Ca4TPSaphDqB6QjU6MpuNLIJqoGoatYyq2rOmBE8Zv/kunot/o58KGL03P3eiA==} + cpu: [x64] + os: [win32] + + '@yuku-parser/binding-android-arm64@0.8.7': + resolution: {integrity: sha512-eGKYiUDX7Y0V7tDTmg+JTVnXnjMqfXXsorZ+EDf5kxwchQ3Or1HS14MzI2fw+jFhHR85fCWt+mtX33Yao73hIQ==} + cpu: [arm64] + os: [android] + + '@yuku-parser/binding-darwin-arm64@0.8.7': + resolution: {integrity: sha512-Re0RHelKLnjEURulY2/KxW+Ngb8zuNA4BRZuMwgGQNzVumT6u4U2N2hc01oeYVNVof0i7GrXE4UCNBgbpRRnjQ==} + cpu: [arm64] + os: [darwin] + + '@yuku-parser/binding-darwin-x64@0.8.7': + resolution: {integrity: sha512-Hn8DROtQkjlA1ACbPgj4a7eP9IuVOI504oiTwpkWPbpaDWD9KdmnVYCqW+1LfenNK/g7O9NhWGpXEdaCNX7lIA==} + cpu: [x64] + os: [darwin] + + '@yuku-parser/binding-freebsd-x64@0.8.7': + resolution: {integrity: sha512-bAP2OV8wRuzplX/jYxv9+vvqQT8JxyNphI8fLfXGL054Xs+4/J5u33cIm3y4rxY8rdoLmmdiJs2Tq7r7lrDRfA==} + cpu: [x64] + os: [freebsd] + + '@yuku-parser/binding-linux-arm-gnu@0.8.7': + resolution: {integrity: sha512-kTYwJQQgmZeAWdDIWabiReIZMpmfLueIj1tCmjStUtFGhR1Z0qwxonKVfUC4N7h/VhGGzLZ//7O1kgt1QKqgCg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-parser/binding-linux-arm-musl@0.8.7': + resolution: {integrity: sha512-uL4jE8HPT2BLlxAXyD10LqgPuXa9eDa0BKpCdSANmzIJghq/2eZo3/gQNtaxPZMupWoxjYzSad9IXrwu7aYPXQ==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-parser/binding-linux-arm64-gnu@0.8.7': + resolution: {integrity: sha512-3gVN4pWSKZmXiNX7cU164dR9MPvesCHnlH6nPfpK+yQsCuYphjKKplcb4SnZBrhiqmXbgb2HR0c2TS0IZUPhgA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-parser/binding-linux-arm64-musl@0.8.7': + resolution: {integrity: sha512-S0mwfEjoLpxzXeZw802Wa4RaELsQiPtWqG6INcy8j4GtvNFtl4LCX3eGO1XLn9pyLAISLzTRyU3zUCBUPin8lg==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-parser/binding-linux-x64-gnu@0.8.7': + resolution: {integrity: sha512-lnbWdPmerE5D1uH1G4IEZKnPzCrWCStRGrtgpSIe1RibAo5bZIjDbbbPYXmMHCEh4F+x/JaJpElh26a3r+BPbg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-parser/binding-linux-x64-musl@0.8.7': + resolution: {integrity: sha512-769uwndMvMzUvATWbAcEvyLHKA+DzhHSCl/obBUrRdYfRo26yxui6S8y3z7uJ+Naup7UKrDxrpK7OnQkxkl9KQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-parser/binding-win32-arm64@0.8.7': + resolution: {integrity: sha512-mEB/9PlaAkisJ6KWGz0zvywXoU6+80dTlR2LwS7s/jcXXoU6fm2+sitBZXtqu3+Q4DcDgPxM45uWMCzPs0TSRw==} + cpu: [arm64] + os: [win32] + + '@yuku-parser/binding-win32-x64@0.8.7': + resolution: {integrity: sha512-8vNB2DP0ou61nGb8tc/qfi41gfyDXz1MHr2zqL3nR+cJ6CEbiuWV/l/a/vv151gCgiZLLAyGkQGENpozdg716w==} + cpu: [x64] + os: [win32] + + '@yuku-toolchain/types@0.8.7': + resolution: {integrity: sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -5577,8 +5815,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.17.0: - resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} engines: {node: '>=0.4.0'} hasBin: true @@ -5587,9 +5825,6 @@ packages: engines: {node: '>=22.13.0'} hasBin: true - aes-js@3.1.2: - resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} - agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -5647,6 +5882,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argparse@3.0.0: + resolution: {integrity: sha512-BOp5NMrHqKxmq/OLr+clzzrRxgOKSLkcjmkWuChp7Irqwn4s74WjOBPIgWfA/HMcBnVkZ5XEuf9uUqzlpfCQ6A==} + array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} @@ -5666,10 +5904,6 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-kit@3.0.0: - resolution: {integrity: sha512-8OG92q3R35qjC/4i6BLBMg8IB+fClWu/1PEwg2Z9Rn+BuNaiEgJzpzn+pxWOdHJWDCAwu2JP0wCDTozAM4QirQ==} - engines: {node: ^22.18.0 || >=24.11.0} - ast-v8-to-istanbul@1.0.5: resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==} @@ -5702,8 +5936,8 @@ packages: resolution: {integrity: sha512-E9Bl1FGGDS81H/mKvaoPq0iQ8uT3qTBe6XWjipOo5kYrhLMAbjD7hREAVle0YJFahZOVbztxTdkwi0VBDJutSA==} engines: {node: '>=14'} - axios@1.18.1: - resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} + axios@1.19.0: + resolution: {integrity: sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==} b4a@1.8.1: resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} @@ -5716,8 +5950,8 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - baileys@7.0.0-rc13: - resolution: {integrity: sha512-v8k74K8B5R7WNYGa26MyJAYEu3Wc4BSuK01QaK8lr30lhE8Nga31nWNu8KN0NDDt+Fsvkq4SQFFI8Q13ghjKmA==} + baileys@7.0.0-rc14: + resolution: {integrity: sha512-pewtrljhWx5JTUBvvkXZz1fL3JPiwzjBsnhx/DWf2LWBx1cZNH7J/sF22xDehba5mySWUQU4a1Pwt7lWARUxaA==} engines: {node: '>=20.0.0'} peerDependencies: audio-decode: ^2.1.3 @@ -5794,9 +6028,6 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - birpc@4.0.0: - resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - bn.js@4.12.5: resolution: {integrity: sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==} @@ -5825,10 +6056,6 @@ packages: bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -5922,9 +6149,9 @@ packages: cjs-module-lexer@2.2.0: resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} - clawpdf@0.3.0: - resolution: {integrity: sha512-41+3AnKk9yek2sm+/9XvUlDTN8Wi+ag7fmxZuqw+ySn4lqaf/fCgLeamqPLiXY4gVbizKEHGoTG/JrIIFNE2rw==} - engines: {node: '>=20'} + clawpdf@0.3.1: + resolution: {integrity: sha512-HZ8gz3cm8arzT/V2CnMZlHlRJbsrUYQ71u+A4nymeyvNnYzpZ8RQwkr2EIZiXCOzRkzFy8sOiHBXBuSUDDcXqQ==} + engines: {node: '>=22'} hasBin: true cliui@6.0.0: @@ -6075,10 +6302,6 @@ packages: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} - date-fns@4.4.0: resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} @@ -6161,8 +6384,8 @@ packages: dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} - discord-api-types@0.38.52: - resolution: {integrity: sha512-uwe9EKfbjsmgWc2fdFjvDbj+dQqx3lp7wqDCmIha0jInuU+xeQjkCK9tMMn+p7RXfdVQORCInq4cD3U2ymDmyg==} + discord-api-types@0.38.53: + resolution: {integrity: sha512-HL1zz/UuZ+bbJjA/X8Kbxx9gk8v9rJAbTeWRNYKmIdjwJ7EovjlHgoJTxcLpATfNJ+AonOtMdy3Y5MVIJAAd/A==} dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} @@ -6291,6 +6514,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -6352,8 +6580,8 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} - execa@10.0.0: - resolution: {integrity: sha512-Cxl6MKxB1dr1H0FHmiizJ+lavKF7pV+fcDZFyqMB8d5m7qUPm/OtZYcD5vPWePKxSnTQ57KuBd9mtdZ3oNCvyQ==} + execa@10.0.1: + resolution: {integrity: sha512-ge98qjkRK4IB7tL7Ju/6qmm5LHoH1eEMt5FNZrz3f4UIYhF28lggX20z3FaX1sgc67msLEn0N0BscOs29iuwyw==} engines: {node: '>=22'} expect-type@1.4.0: @@ -6429,8 +6657,8 @@ packages: file-entry-cache@11.1.5: resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} - file-type@22.0.1: - resolution: {integrity: sha512-ww5Mhre0EE+jmBvOXTmXAbEMuZE7uX4a3+oRCQFNj8w++g3ev913N6tXQz0XTXbueQ5TWQfm6BdaViEHHn8bhA==} + file-type@22.0.2: + resolution: {integrity: sha512-0H8TsCUGBLx+V5adH3EY52hTAcyLKbV1D4gq5cIOJ6DnQAHeV9Z2Hhuc5CoBX4YmvB2oL+JIC84z0qO7JsCoNw==} engines: {node: '>=22'} fill-range@7.1.1: @@ -6637,8 +6865,8 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + highlight.js@11.12.0: + resolution: {integrity: sha512-nbfWpyRMcMrPMmDwJB+dhX/eiaPKtc2RB+0QZskqJ3WjRA/FDS0e9hZrx8EC/lbEv8gXy98FcDbNa/dspAaJMg==} engines: {node: '>=12.0.0'} hono@4.13.2: @@ -6754,19 +6982,16 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - int64-buffer@1.1.1: - resolution: {integrity: sha512-xp/v0/im2q7n7ISFJXcYsr/aVsUdZKPUZS1uYtoM9I9Cfmm5YuAi7SQts2TrEXwAKIE0wyn3KxJbo35goJgvwQ==} - - ip-address@10.3.1: - resolution: {integrity: sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==} + ip-address@10.5.0: + resolution: {integrity: sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==} engines: {node: '>= 12'} ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.4.0: - resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==} + ipaddr.js@2.5.0: + resolution: {integrity: sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==} engines: {node: '>= 10'} ircv3@0.33.1: @@ -6886,8 +7111,8 @@ packages: jose@4.15.9: resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} - jose@6.2.4: - resolution: {integrity: sha512-N8acGzVsQy6M/fjFcxtysNc4Q379TcM5dM/qKkNtsHFji88yANnXTr7BLeP75iPnFwBfQzM/jg2BZ9+HZrHCZA==} + jose@6.2.9: + resolution: {integrity: sha512-XrchZOFZUl/T3vTwRe8XK+cJrGtMF4th1ARnDfwbBXFKThGhlsxEE4Zu03AD/bjJSt/9jT/mxrOCkJWOg77aPA==} js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -6899,41 +7124,41 @@ packages: resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true - jscpd-darwin-arm64@5.0.12: - resolution: {integrity: sha512-CQCDYhQY9yOGGeauzkRGYW/QtXurPCjfDkEhUoM/M5UdmpzxfG3i9mnNsaheJ0RdFRf73mL7JaLVRP8U2l5/kA==} + jscpd-darwin-arm64@5.0.15: + resolution: {integrity: sha512-7UIRxKkvqN7bVIl2nXYsTOs7a2M6Y1Ll58KehquQbI6gUC3I7AAd/vz2HNWIdo+f5lJB0tiN1E9B/i6CUM4WHQ==} cpu: [arm64] os: [darwin] - jscpd-darwin-x64@5.0.12: - resolution: {integrity: sha512-7XNCDfChP9fPkIWLepd0zGnTov7/5mR7rJ5Utc1MdWFdgkN//qz6FAJ1FhQA0E/qjFedy9XTucfUCgLybSBsjw==} + jscpd-darwin-x64@5.0.15: + resolution: {integrity: sha512-ifknlGR2xW9yZ5BCeUBkBOrOFBAFMQmugpzFnx1y8/BDve0pyBLjxIOVnN/bqeqLDV+sd/zxkx5Gf/xD9UlRKA==} cpu: [x64] os: [darwin] - jscpd-linux-arm64-gnu@5.0.12: - resolution: {integrity: sha512-i/usHD0/8twzb2Qo4vFWcnuAD4IDLS6K/mTXwYy1CiJZDw4gmjfH45jtjdKUyoutTAiNs+ZWZgx1gIRljUbFuA==} + jscpd-linux-arm64-gnu@5.0.15: + resolution: {integrity: sha512-JrlE0Nk2NRt9EmGD+5ZjMI0il5t/zxj3uwcintnugJumRmbKy2ncr2MALJLeulUTHLT7uYMEveLK2b79DLtDAQ==} cpu: [arm64] os: [linux] libc: [glibc] - jscpd-linux-x64-gnu@5.0.12: - resolution: {integrity: sha512-TqaeSTaGawcqyXSrQvYJFtLRn4aQeHgphGGsq2ZtVAg+lPeuMmh81c3bl0yi2dL3gDX1RGBQKBVul1XQknOuoA==} + jscpd-linux-x64-gnu@5.0.15: + resolution: {integrity: sha512-Hb37UrME4X3tAyw4EYNTuSOeet0uq2UYwyeWUphdjTY8Z9GB4qzniDyCClvNjzAbz9EZ47LXHYvZSP6hlzhgIw==} cpu: [x64] os: [linux] libc: [glibc] - jscpd-linux-x64-musl@5.0.12: - resolution: {integrity: sha512-WelugY1/rdoo0Y0sqJ2XQOIvyIZTfRe+vP3MJe4XvEUwPF0v+9SQoS34FnfblRhsddVixyNkgl7x/sHid9UMJw==} + jscpd-linux-x64-musl@5.0.15: + resolution: {integrity: sha512-dFHCSfL+h3irvmkRCn8MojdA5R1NuUPswVUrr3vrCI+3v5VjBBrERWfq1rpnFdKOgK7T/4Fvkj4L04vnWPTRiQ==} cpu: [x64] os: [linux] libc: [musl] - jscpd-windows-x64-msvc@5.0.12: - resolution: {integrity: sha512-01x1klKjvfzI6Of5tI9u72x7TIQZQLLG6kMdsEPJKl/BXbskdknrfCepeTXRBbdFPKs25jfcd0klZ4OdDvww5w==} + jscpd-windows-x64-msvc@5.0.15: + resolution: {integrity: sha512-OJ5F5qePxS9EVyw5pdCOAAR7SRm02LJyCMAHXB5bSUfo4mOZrEKkhgO+EUHgK4p7Blpovw9acpgf1/R2o1Z4Ig==} cpu: [x64] os: [win32] - jscpd@5.0.12: - resolution: {integrity: sha512-87dC+akj2mCywlt8p3xnRlDg0B55u4GDbfE9cuwOOeIxbEuWuIoNqGoYi65A0516aJ4EzAjGwBj1Qb/Ahc8WAQ==} + jscpd@5.0.15: + resolution: {integrity: sha512-PJF3ALlPVJGiMoCtSHg6Ln3/dnRVd27sD/UTUv62MAS5I0jdhvqI0x0p8D1LP8xJ35GLTgHzCMSQvjoa/JNZkg==} engines: {node: '>=18'} hasBin: true @@ -7014,8 +7239,8 @@ packages: koffi@3.1.5: resolution: {integrity: sha512-XVwwrxg0Ca6IEUQF4YtGIU4XN0LSselFYpYvgfhh8wafCunhEEx5hPr7LZhp5QyeFA/LcRsKHTqncCdjWjWAlg==} - kysely@0.29.4: - resolution: {integrity: sha512-y5mVgQNkMbs1eK9Xyc0pmNdabN2wHhRYY/5r4W5HrUT1rYCEPeVNSj1RUJeSDKT3U0p+mXCvLgkrFuIafYI6BA==} + kysely@0.29.5: + resolution: {integrity: sha512-ooa+eSbBNPTo3MycPEuW5jdrxQdQwdtB3LC3h43FiXQbIry5tR0C5lDG7eealK0E4D7XjrnOP5DIUg/LyjRMYQ==} engines: {node: '>=22.0.0'} leven@3.1.0: @@ -7026,8 +7251,8 @@ packages: resolution: {integrity: sha512-x/2Gu1/C6L3IICY09zyfp984AWiOYjn53u4WfdY3yh+3KTzMN8Xkm77q3lenWMVIk5SnSzjGEkQT+VQMFHLBHQ==} engines: {node: '>=20'} - libphonenumber-js@1.13.9: - resolution: {integrity: sha512-VNS5vWMM7r0P66BYv+TQJATxExEgLxN+34hfHDVhDkUsGAE4cRg0shCNSLTXNKm7nIUscC7AfB51TjxEeF7msQ==} + libphonenumber-js@1.13.11: + resolution: {integrity: sha512-ETER2kMaIFTI/Nh1a8Gk03dUF/SL0VZqtI+CcVHZxp5WIHYwNS7S+uiYZDYCvLy3lOR4/DAD5jf0h5WkePPpqg==} libsignal@6.0.0: resolution: {integrity: sha512-d/5V3YFtDljbFMufz4ncyUYGYhJl+vzAe+c2EFFBQ6bz1h8Q3IOMEGXYMzlibU60I+e8GagMMpji18iez3P1hA==} @@ -7128,8 +7353,8 @@ packages: canvas: optional: true - linkify-it@5.0.2: - resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} + linkify-it@6.1.0: + resolution: {integrity: sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==} lit-analyzer@2.0.3: resolution: {integrity: sha512-XiAjnwVipNrKav7r3CSEZpWt+mwYxrhPRVC7h8knDmn/HWTzzWJvPe+mwBcL2brn4xhItAMzZhFC8tzzqHKmiQ==} @@ -7193,9 +7418,6 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - loglevel@1.9.2: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} @@ -7238,8 +7460,8 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-it-cjk-friendly@2.0.2: - resolution: {integrity: sha512-KXCl6sd129UqkAiRDb+NcAHrxC9xRa2WsGIsMMvtp2y1YlbeIaNYzArX2zfDoGhOjsyNMfJrGO7xGBss27YQSA==} + markdown-it-cjk-friendly@2.0.3: + resolution: {integrity: sha512-dBAhqp7GZ6he15ug2t5JSfwTw2KvZX9tt0y7Up0reR1cZOBUogSq5V859hcIGwge7hjW1SkUaWkNr++0HszyZg==} engines: {node: '>=18'} peerDependencies: '@types/markdown-it': '*' @@ -7251,8 +7473,8 @@ packages: markdown-it-task-lists@2.1.1: resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} - markdown-it@14.3.0: - resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} + markdown-it@15.0.0: + resolution: {integrity: sha512-Lf8ajvVNdRpzSNB4VegxNy7gjs8gU35l4b4+ET49LrQC5PKYwLZ72u60LeJ9gv3qiaesuYjJWCyVeQmv/QWKQw==} hasBin: true markdown-table@3.0.4: @@ -7268,8 +7490,8 @@ packages: engines: {node: '>= 20'} hasBin: true - marked@18.0.7: - resolution: {integrity: sha512-iDVQ5ldaiKXn6b2JroX5kgRfmwgqolW7NpaEzTl1k/2Zh1njIEN9yniyLV/mOvWwtsE8OGgkjsCYvijuPk1dtA==} + marked@18.0.9: + resolution: {integrity: sha512-/Sa4qiiHZxf0/FQdBBowr9q4r10krCwMvpK48FUBdXdUXScDxiQGR9zCPrFgRVR5LU3iySOiIjy09ZQvADir1w==} engines: {node: '>= 20'} hasBin: true @@ -7462,8 +7684,8 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} minimist@1.2.8: @@ -7504,9 +7726,6 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - mp4box@0.5.4: - resolution: {integrity: sha512-GcCH0fySxBurJtvr0dfhz0IxHZjc1RP+F+I8xw+LIwkU1a+7HJx8NCDiww1I5u4Hz6g4eR1JlGADEGJ9r4lSfA==} - mpg123-decoder@1.0.3: resolution: {integrity: sha512-+fjxnWigodWJm3+4pndi+KUg9TBojgn31DPk85zEsim7C6s0X5Ztc/hQYdytXkwuGXH+aB0/aEkG40Emukv6oQ==} @@ -7539,9 +7758,6 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - neoip@3.1.0: - resolution: {integrity: sha512-KtkXRRp1XK2BzJpLF7PRHyndphWn/bU5XkQFUJtAdm6rdUenkJZwQDpxifG+Q/7PLpxhc+wdcZiE15L/cZhnXA==} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -7586,8 +7802,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - nostr-tools@2.24.1: - resolution: {integrity: sha512-KdrKjC74n/rr6J3eCSfZj8dcbZFvolHYe4S22SefNZ5YWbhHiB0KL/mmJjEZ0u6B9mZK0YcQtl+WQ46KzwapeQ==} + nostr-tools@2.24.2: + resolution: {integrity: sha512-nVf8tvsDPsZvvtT5csRTrMrdrhTId8wl3IgDHt1BWCuL6J+IlmBOW68SCl7SQ6K0PoxenpLPHSKLo4yj49JybA==} peerDependencies: typescript: '>=5.0.0' peerDependenciesMeta: @@ -7666,10 +7882,11 @@ packages: resolution: {integrity: sha512-cPkT6zjEcE4qU5OW/SoDDuXEsdOLrXlAORhzmaguj5xZSPlgKvLhi27sFWhLKj07Y6WKNWxcwIbzm512FzTBNQ==} hasBin: true - openai@6.49.0: - resolution: {integrity: sha512-aYCc0C6L864eR6WSYIwQGyXriw/nIyZx0ObvhzOEVuk0zoBDpynjSbrionWI7q65B5H8jJX0DXR9snEzM6bfPg==} + openai@7.4.0: + resolution: {integrity: sha512-+C9Muit5x8j9R8ej8ZzVgKcrVDtqFqTy9gxFdov0EItLgU68zrJtF9ZeT0cyqJQW9S3PCJkdFgADtRGquRBtew==} + engines: {node: '>=22.0.0'} peerDependencies: - '@aws-sdk/credential-provider-node': 3.972.72 + '@aws-sdk/credential-provider-node': 3.972.80 '@smithy/hash-node': '>=4.3.0 <5' '@smithy/signature-v4': '>=5.4.0 <6' ws: ^8.18.0 @@ -7706,8 +7923,8 @@ packages: resolution: {integrity: sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==} hasBin: true - oxlint@1.75.0: - resolution: {integrity: sha512-m9WzjRcRYA/uqIZDa9tclrieoPJ/ln1QYTKdFx6NUOs8uY5DiHlIwRQoCrHT6OM6O3ww3l2skY5gO7G7ZphE7g==} + oxlint@1.78.0: + resolution: {integrity: sha512-QgQePuxIqKOzo1KSjG2EnITEeWvWnKAm77eq8nrMtf6AGoA+zyGc4PFYtDNJSD25g/ibOwfQ851hZ4/SPkMVoA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -7719,10 +7936,6 @@ packages: vite-plus: optional: true - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -7919,6 +8132,10 @@ packages: resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + engines: {node: ^10 || ^12 || >=14} + powershell-utils@0.1.0: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} @@ -7960,8 +8177,8 @@ packages: property-information@7.2.0: resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - protobufjs@8.7.1: - resolution: {integrity: sha512-agdGHrXNTv0IrYscJPDou/PlEJk1c/hBZ9o/B5NH2i/nSPtPqacNxzgwf1CebXxFMjMrZH5sqv9uQuw96aGt/A==} + protobufjs@8.7.2: + resolution: {integrity: sha512-oTVHV+oelUBtiu5iTuTNNZ0eLYsXSMxry4cgr30mayNkgIZL6qZ0IOQVPuSWGcyAaXKl/XgqwWHIC3a0khYVBA==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: @@ -8021,15 +8238,15 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - quickjs-wasi@3.2.0: - resolution: {integrity: sha512-+7ArUWrc1qCtFLjpNVGI47eGih4TKWg3RSB+FfPFtnfZrKlgvCGUUWbClDalFL7lzNAYH82jrPPHsh3LBkuk7g==} + quickjs-wasi@3.4.0: + resolution: {integrity: sha512-ttKaBD8u0RXhz2UqDU8wOEruhxADt0WWHfMfnNR8aO0UyhlifFS6NvPYFbyhASjqIp2/1dpneoP1IzBUxION1w==} range-parser@1.3.0: resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} engines: {node: '>= 0.6'} - rastermill@0.3.1: - resolution: {integrity: sha512-CX4nij6+ZLHYIaojJNfLTr7W+AiH/IPJi6E9Aw1br2///1KZL2KBOHd68rkcLedc47MPvb4hhH+fzYeGFa4A/Q==} + rastermill@0.3.2: + resolution: {integrity: sha512-Qr4Q+PKsAyAPn4sHwY+hJ2P7rv+WJ4HZ8X+KjwVmm0tOpkb1IrtCb7sbwDZ8iJLUgiYafhmG4VHwo7Pjej0pgQ==} engines: {node: '>=22'} raw-body@3.0.2: @@ -8135,32 +8352,32 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown-plugin-dts@0.25.2: - resolution: {integrity: sha512-nMhN/R+vmR8GM45ZW1FWMSjRTSDDn/6w4GTf8RNrEFCBdl8B1kySWrU1ixPtbwzXoRlcO+R/S88VgXuJQwfdDg==} - engines: {node: ^22.18.0 || >=24.0.0} + rolldown-plugin-dts@0.27.14: + resolution: {integrity: sha512-ZvuDDwoIpRK9RPxDXratCpklFO9QZZWndf/sd0VBFb4LEj0jj07UcHK9OCh7V4XiFz2Z89ziyBC2K6tJiDjrbw==} + engines: {node: ^22.18.0 || >=24.11.0} peerDependencies: - '@ts-macro/tsc': ^0.3.6 - '@typescript/native-preview': '>=7.0.0-dev.20260325.1' + '@typescript/native-preview': '*' + '@volar/typescript': ~2.4.0 rolldown: ^1.0.0 - typescript: ^5.0.0 || ^6.0.0 - vue-tsc: ~3.2.0 + typescript: ^5.0.0 || ^6.0.0 || ~7.0.0 + vue-tsc: ~3.2.0 || ~3.3.0 peerDependenciesMeta: - '@ts-macro/tsc': - optional: true '@typescript/native-preview': optional: true + '@volar/typescript': + optional: true typescript: optional: true vue-tsc: optional: true - rolldown@1.1.5: - resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + rolldown@1.2.0: + resolution: {integrity: sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.2.0: - resolution: {integrity: sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==} + rolldown@1.2.5: + resolution: {integrity: sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -8175,9 +8392,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rx.mini@1.4.0: - resolution: {integrity: sha512-8w5cSc1mwNja7fl465DXOkVvIOkpvh2GW4jo31nAIvX4WTXCsRnKJGUfiDBzWtYRInEcHAUYIZfzusjIrea8gA==} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -8245,6 +8459,10 @@ packages: resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==} engines: {node: '>=20'} + shiki@4.4.3: + resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} + engines: {node: '>=20'} + side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -8310,8 +8528,8 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.7.1: - resolution: {integrity: sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==} + smol-toml@1.8.0: + resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==} engines: {node: '>= 18'} socks-proxy-agent@10.1.0: @@ -8523,10 +8741,17 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + tldts-core@7.4.10: + resolution: {integrity: sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==} + tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true + tldts@7.4.10: + resolution: {integrity: sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -8552,6 +8777,10 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} + tough-cookie@6.0.2: + resolution: {integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -8583,18 +8812,18 @@ packages: ts-simple-type@2.0.0-next.0: resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} - tsdown@0.22.1: - resolution: {integrity: sha512-Ldx1jLyDFEzsN/fMBi2TBVaZe4fuEJhIiHjQhX0pV7oa5uYz5Imdivs5mNzEXOrMEtFRR6C9BQ2YqLoroffB+Q==} - engines: {node: ^22.18.0 || >=24.0.0} + tsdown@0.22.14: + resolution: {integrity: sha512-ule7Y+fsAN2iZbLDoo7C4KYljFJNJJ+fLshyn+9gozeTspVersWHxwdGB+Dm2hzA38s6muFnUTl0jK3vJm9ifQ==} + engines: {node: ^22.18.0 || >=24.11.0} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.1 - '@tsdown/exe': 0.22.1 + '@tsdown/css': 0.22.14 + '@tsdown/exe': 0.22.14 '@vitejs/devtools': '*' publint: ^0.3.8 tsx: '*' - typescript: ^5.0.0 || ^6.0.0 + typescript: ^5.0.0 || ^6.0.0 || ^7.0.0 unplugin-unused: ^0.5.0 unrun: '*' peerDependenciesMeta: @@ -8631,8 +8860,8 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} - tsx@4.23.1: - resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} + tsx@4.23.12: + resolution: {integrity: sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -8651,8 +8880,8 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - typebox@1.3.6: - resolution: {integrity: sha512-Sc8RA0NCMEFmApHNU9ZMzqcpQj46She44J8ffpLM/bdhLNUZKq7DJumcLcsFx1gRmDfQPgCgOmFFJ7rcnfWNyA==} + typebox@1.3.14: + resolution: {integrity: sha512-uD3FHZb4St/7E7eY0YANSt+yZABDDlbeJbXhUU17x2GZLyHUiQ6+mxSpZhZtnJSjKy/7PZ49r7SDZHG4F3JsLw==} typescript@5.2.2: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} @@ -8664,11 +8893,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@7.0.2: - resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} - engines: {node: '>=16.20.0'} - hasBin: true - typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} @@ -8677,8 +8901,8 @@ packages: resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} engines: {node: '>=12.17'} - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uc.micro@3.0.0: + resolution: {integrity: sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==} uhyphen@0.2.0: resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} @@ -8706,8 +8930,8 @@ packages: resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} - undici@8.9.0: - resolution: {integrity: sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==} + undici@8.10.0: + resolution: {integrity: sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==} engines: {node: '>=22.19.0'} unhomoglyph@1.0.6: @@ -8767,19 +8991,23 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + verkit@0.3.2: + resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} + engines: {node: '>=18.12.0'} + vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@8.1.5: - resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} + vite@8.2.1: + resolution: {integrity: sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 + '@vitejs/devtools': ^0.4.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -8907,8 +9135,8 @@ packages: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} - web-tree-sitter@0.26.11: - resolution: {integrity: sha512-Q5Dm3YTIXSXuH6FxX6RuzX2Qwpc4DPGiYMU87Wg5Z8OIStiQFiUex4zMDc0vBTw78EphaYJacncJghCHzbZptg==} + web-tree-sitter@0.26.12: + resolution: {integrity: sha512-fvqTNZQBGUgUgfP0mHw+iHf9Yf6bRQrp0A3pSf2v/hSKxkT1beCoIWoLVmlPL7O6dmySfSb/t1aJoJvrgTRStw==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -8917,27 +9145,8 @@ packages: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} - werift-common@0.0.3: - resolution: {integrity: sha512-ma3E4BqKTyZVLhrdfTVs2T1tg9seeUtKMRn5e64LwgrogWa62+3LAUoLBUSl1yPWhgSkXId7GmcHuWDen9IJeQ==} - engines: {node: '>=16'} - - werift-dtls@0.5.7: - resolution: {integrity: sha512-z2fjbP7fFUFmu/Ky4bCKXzdgPTtmSY1DYi0TUf3GG2zJT4jMQ3TQmGY8y7BSSNGetvL4h3pRZ5un0EcSOWpPog==} - engines: {node: '>=16'} - - werift-ice@0.2.2: - resolution: {integrity: sha512-td52pHp+JmFnUn5jfDr/SSNO0dMCbknhuPdN1tFp9cfRj5jaktN63qnAdUuZC20QCC3ETWdsOthcm+RalHpFCQ==} - - werift-rtp@0.8.8: - resolution: {integrity: sha512-GiYMSdvCyScQaw5bnEsraSoHUVZpjfokJAiLV4R1FsiB06t6XiebPYPpkqB9nYNNKiA8Z/cYWsym7wISq1sYSQ==} - engines: {node: '>=10'} - - werift-sctp@0.0.11: - resolution: {integrity: sha512-7109yuI5U7NTEHjqjn0A8VeynytkgVaxM6lRr1Ziv0D8bPcaB8A7U/P88M7WaCpWDoELHoXiRUjQycMWStIgjQ==} - engines: {node: '>=10'} - - werift@0.24.1: - resolution: {integrity: sha512-8Mpf0FWO2pkd9UQyZ0Hb1CcimydlNh8KCvZGD2X/D0ucVY6ubJxX91cndOpTOnPA7wleopop044VSNZeCEwgeA==} + werift@0.24.4: + resolution: {integrity: sha512-NoROZ11L/ZqAB5ombCB4VBuVNdIZfwI493zlxlIX7BlwfWRy55eDJdtWMC2VX35yBXFaWwA8NtYbmJ8qWtVk9Q==} engines: {node: '>=16'} whatsapp-rust-bridge@0.5.4: @@ -9010,6 +9219,18 @@ packages: utf-8-validate: optional: true + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -9068,6 +9289,15 @@ packages: resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} engines: {node: '>=18'} + yuku-ast@0.8.7: + resolution: {integrity: sha512-h6+4bDfyootiMB9vckk5uKo5r5j0GHrkr17FQTDNfEsFT3DWlN9uu1HJwQwc64pgmLCI945fWM3lbTIqxjT3GQ==} + + yuku-codegen@0.8.7: + resolution: {integrity: sha512-adwDZSh8oVDzhE6Du9PwVWxcOxeV0e2EVhUuMKWfhSY4wkrDq9eqixlxFF3l/XGUV1E7UFzhpz9393MUumkyNw==} + + yuku-parser@0.8.7: + resolution: {integrity: sha512-vRD9nwt4L3aYpxNqeSC4WqLv58xrXef0Ong1Mc45CTXTIpvLafx7JO05sczmQZwdLEZvywrLOGdNC5+Rp5N1BQ==} + zca-js@2.1.2: resolution: {integrity: sha512-82+zCqoIXnXEF6C9YuN3Kf7WKlyyujY/6Ejl2n8PkwazYkBK0k7kiPd8S7nHvC5Wl7vjwGRhDYeAM8zTHyoRxQ==} engines: {node: '>=18.0.0'} @@ -9106,16 +9336,16 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.25.2(zod@3.25.76) - '@agentclientprotocol/claude-agent-acp@0.62.0(@anthropic-ai/sdk@0.115.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))': + '@agentclientprotocol/claude-agent-acp@0.69.0(@anthropic-ai/sdk@0.117.1(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))': dependencies: '@agentclientprotocol/sdk': 1.3.0(zod@4.4.3) - '@anthropic-ai/claude-agent-sdk': 0.3.219(@anthropic-ai/sdk@0.115.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(zod@4.4.3) + '@anthropic-ai/claude-agent-sdk': 0.3.232(@anthropic-ai/sdk@0.117.1(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(zod@4.4.3) zod: 4.4.3 transitivePeerDependencies: - '@anthropic-ai/sdk' - '@modelcontextprotocol/sdk' - '@agentclientprotocol/codex-acp@1.1.7': + '@agentclientprotocol/codex-acp@1.4.0': dependencies: '@agentclientprotocol/sdk': 1.3.0(zod@4.4.3) '@openai/codex': 0.148.0 @@ -9128,55 +9358,55 @@ snapshots: dependencies: zod: 4.4.3 - '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.219': + '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.219': + '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.219': + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.219': + '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.219': + '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.219': + '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.219': + '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.219': + '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.232': optional: true - '@anthropic-ai/claude-agent-sdk@0.3.219(@anthropic-ai/sdk@0.115.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(zod@4.4.3)': + '@anthropic-ai/claude-agent-sdk@0.3.232(@anthropic-ai/sdk@0.117.1(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(zod@4.4.3)': dependencies: - '@anthropic-ai/sdk': 0.115.0(zod@4.4.3) + '@anthropic-ai/sdk': 0.117.1(zod@4.4.3) '@modelcontextprotocol/sdk': 1.30.0(supports-color@10.2.2)(zod@4.4.3) zod: 4.4.3 optionalDependencies: - '@anthropic-ai/claude-agent-sdk-darwin-arm64': 0.3.219 - '@anthropic-ai/claude-agent-sdk-darwin-x64': 0.3.219 - '@anthropic-ai/claude-agent-sdk-linux-arm64': 0.3.219 - '@anthropic-ai/claude-agent-sdk-linux-arm64-musl': 0.3.219 - '@anthropic-ai/claude-agent-sdk-linux-x64': 0.3.219 - '@anthropic-ai/claude-agent-sdk-linux-x64-musl': 0.3.219 - '@anthropic-ai/claude-agent-sdk-win32-arm64': 0.3.219 - '@anthropic-ai/claude-agent-sdk-win32-x64': 0.3.219 + '@anthropic-ai/claude-agent-sdk-darwin-arm64': 0.3.232 + '@anthropic-ai/claude-agent-sdk-darwin-x64': 0.3.232 + '@anthropic-ai/claude-agent-sdk-linux-arm64': 0.3.232 + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl': 0.3.232 + '@anthropic-ai/claude-agent-sdk-linux-x64': 0.3.232 + '@anthropic-ai/claude-agent-sdk-linux-x64-musl': 0.3.232 + '@anthropic-ai/claude-agent-sdk-win32-arm64': 0.3.232 + '@anthropic-ai/claude-agent-sdk-win32-x64': 0.3.232 - '@anthropic-ai/sdk@0.115.0(zod@4.4.3)': + '@anthropic-ai/sdk@0.117.1(zod@4.4.3)': dependencies: json-schema-to-ts: 3.1.1 standardwebhooks: 1.0.0 optionalDependencies: zod: 4.4.3 - '@anthropic-ai/vertex-sdk@0.19.0(supports-color@10.2.2)(zod@4.4.3)': + '@anthropic-ai/vertex-sdk@0.19.4(supports-color@10.2.2)(zod@4.4.3)': dependencies: - '@anthropic-ai/sdk': 0.115.0(zod@4.4.3) + '@anthropic-ai/sdk': 0.117.1(zod@4.4.3) google-auth-library: 10.9.1(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -9202,12 +9432,12 @@ snapshots: '@asamuzakjp/nwsapi@2.3.9': {} - '@awesome.me/webawesome@3.10.0(@floating-ui/utils@0.2.12)(@types/node@24.13.3)(@types/react@19.2.17)': + '@awesome.me/webawesome@3.11.0(@floating-ui/utils@0.2.12)(@types/node@26.2.0)(@types/react@19.2.17)': dependencies: '@ctrl/tinycolor': 4.1.0 '@floating-ui/dom': 1.8.0 '@konnorr/qr-creator': 1.0.1 - '@lit-labs/ssr': 4.1.0(@types/node@24.13.3) + '@lit-labs/ssr': 4.1.0(@types/node@26.2.0) '@lit-labs/ssr-client': 1.1.8 '@lit/context': 1.1.6 '@lit/react': 1.0.8(@types/react@19.2.17) @@ -9222,62 +9452,62 @@ snapshots: - '@types/node' - '@types/react' - '@aws-sdk/checksums@3.1000.20': + '@aws-sdk/checksums@3.1000.29': dependencies: - '@aws-sdk/core': 3.977.1 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/client-bedrock-runtime@3.1111.0': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/credential-provider-node': 3.972.80 + '@aws-sdk/eventstream-handler-node': 3.972.34 + '@aws-sdk/middleware-eventstream': 3.972.29 + '@aws-sdk/middleware-websocket': 3.972.52 + '@aws-sdk/token-providers': 3.1111.0 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.2 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.1095.0': + '@aws-sdk/client-bedrock@3.1111.0': dependencies: - '@aws-sdk/core': 3.977.1 - '@aws-sdk/credential-provider-node': 3.972.72 - '@aws-sdk/eventstream-handler-node': 3.972.30 - '@aws-sdk/middleware-eventstream': 3.972.25 - '@aws-sdk/middleware-websocket': 3.972.43 - '@aws-sdk/token-providers': 3.1095.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/fetch-http-handler': 5.6.11 - '@smithy/node-http-handler': 4.9.11 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/credential-provider-node': 3.972.80 + '@aws-sdk/token-providers': 3.1111.0 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.2 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-bedrock@3.1095.0': + '@aws-sdk/client-s3@3.1111.0': dependencies: - '@aws-sdk/core': 3.977.1 - '@aws-sdk/credential-provider-node': 3.972.72 - '@aws-sdk/token-providers': 3.1095.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/fetch-http-handler': 5.6.11 - '@smithy/node-http-handler': 4.9.11 + '@aws-sdk/checksums': 3.1000.29 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/credential-provider-node': 3.972.80 + '@aws-sdk/middleware-sdk-s3': 3.972.75 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.2 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-s3@3.1095.0': + '@aws-sdk/core@3.977.8': dependencies: - '@aws-sdk/checksums': 3.1000.20 - '@aws-sdk/core': 3.977.1 - '@aws-sdk/credential-provider-node': 3.972.72 - '@aws-sdk/middleware-sdk-s3': 3.972.66 - '@aws-sdk/signature-v4-multi-region': 3.996.42 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/fetch-http-handler': 5.6.11 - '@smithy/node-http-handler': 4.9.11 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/core@3.977.1': - dependencies: - '@aws-sdk/types': 3.974.2 - '@aws-sdk/xml-builder': 3.972.37 + '@aws-sdk/types': 3.974.5 + '@aws-sdk/xml-builder': 3.972.39 '@aws/lambda-invoke-store': 0.3.0 - '@smithy/core': 3.30.0 - '@smithy/signature-v4': 5.6.10 + '@smithy/core': 3.33.3 + '@smithy/signature-v4': 5.7.3 '@smithy/types': 4.16.1 bowser: 2.14.1 tslib: 2.8.1 @@ -9287,30 +9517,64 @@ snapshots: '@aws-sdk/nested-clients': 3.997.35 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-env@3.972.61': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.972.70': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.972.63': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 '@smithy/fetch-http-handler': 5.6.11 - '@smithy/node-http-handler': 4.9.11 - '@smithy/types': 4.16.1 + '@smithy/node-http-handler': 4.11.2 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.972.72': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.973.15': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/credential-provider-env': 3.972.70 + '@aws-sdk/credential-provider-http': 3.972.72 + '@aws-sdk/credential-provider-login': 3.972.77 + '@aws-sdk/credential-provider-process': 3.972.70 + '@aws-sdk/credential-provider-sso': 3.973.14 + '@aws-sdk/credential-provider-web-identity': 3.972.76 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/credential-provider-imds': 4.5.2 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-ini@3.973.6': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/credential-provider-env': 3.972.61 '@aws-sdk/credential-provider-http': 3.972.63 '@aws-sdk/credential-provider-login': 3.972.68 @@ -9321,68 +9585,104 @@ snapshots: '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 '@smithy/credential-provider-imds': 4.4.14 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-login@3.972.68': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/nested-clients': 3.997.35 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-node@3.972.72': + '@aws-sdk/credential-provider-login@3.972.77': dependencies: - '@aws-sdk/credential-provider-env': 3.972.61 - '@aws-sdk/credential-provider-http': 3.972.63 - '@aws-sdk/credential-provider-ini': 3.973.6 - '@aws-sdk/credential-provider-process': 3.972.61 - '@aws-sdk/credential-provider-sso': 3.973.5 - '@aws-sdk/credential-provider-web-identity': 3.972.67 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/credential-provider-imds': 4.4.14 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.80': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.70 + '@aws-sdk/credential-provider-http': 3.972.72 + '@aws-sdk/credential-provider-ini': 3.973.15 + '@aws-sdk/credential-provider-process': 3.972.70 + '@aws-sdk/credential-provider-sso': 3.973.14 + '@aws-sdk/credential-provider-web-identity': 3.972.76 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/credential-provider-imds': 4.5.2 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-process@3.972.61': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.70': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.973.14': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/token-providers': 3.1116.0 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-sso@3.973.5': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/nested-clients': 3.997.35 '@aws-sdk/token-providers': 3.1095.0 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-provider-web-identity@3.972.67': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/nested-clients': 3.997.35 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.76': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/credential-providers@3.1095.0': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/credential-provider-cognito-identity': 3.972.60 '@aws-sdk/credential-provider-env': 3.972.61 '@aws-sdk/credential-provider-http': 3.972.63 '@aws-sdk/credential-provider-ini': 3.973.6 '@aws-sdk/credential-provider-login': 3.972.68 - '@aws-sdk/credential-provider-node': 3.972.72 + '@aws-sdk/credential-provider-node': 3.972.80 '@aws-sdk/credential-provider-process': 3.972.61 '@aws-sdk/credential-provider-sso': 3.973.5 '@aws-sdk/credential-provider-web-identity': 3.972.67 @@ -9390,59 +9690,70 @@ snapshots: '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 '@smithy/credential-provider-imds': 4.4.14 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/eventstream-handler-node@3.972.30': + '@aws-sdk/eventstream-handler-node@3.972.34': dependencies: - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-eventstream@3.972.25': + '@aws-sdk/middleware-eventstream@3.972.29': dependencies: - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.66': + '@aws-sdk/middleware-sdk-s3@3.972.75': dependencies: - '@aws-sdk/core': 3.977.1 - '@aws-sdk/signature-v4-multi-region': 3.996.42 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/middleware-websocket@3.972.43': + '@aws-sdk/middleware-websocket@3.972.52': dependencies: - '@aws-sdk/core': 3.977.1 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 - '@smithy/fetch-http-handler': 5.6.11 - '@smithy/signature-v4': 5.6.10 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/signature-v4': 5.7.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/nested-clients@3.997.35': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/signature-v4-multi-region': 3.996.42 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 '@smithy/fetch-http-handler': 5.6.11 - '@smithy/node-http-handler': 4.9.11 - '@smithy/types': 4.16.1 + '@smithy/node-http-handler': 4.11.2 + '@smithy/types': 4.17.2 tslib: 2.8.1 - '@aws-sdk/s3-request-presigner@3.1095.0': + '@aws-sdk/nested-clients@3.997.44': dependencies: - '@aws-sdk/core': 3.977.1 - '@aws-sdk/signature-v4-multi-region': 3.996.42 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.30.0 + '@aws-sdk/core': 3.977.8 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/fetch-http-handler': 5.7.2 + '@smithy/node-http-handler': 4.11.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/s3-request-presigner@3.1111.0': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/signature-v4-multi-region': 3.996.46 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 '@smithy/types': 4.16.1 tslib: 2.8.1 @@ -9450,29 +9761,59 @@ snapshots: dependencies: '@aws-sdk/types': 3.974.2 '@smithy/signature-v4': 5.6.10 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.996.46': + dependencies: + '@aws-sdk/types': 3.974.5 + '@smithy/signature-v4': 5.7.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/token-providers@3.1095.0': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 '@aws-sdk/nested-clients': 3.997.35 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.30.0 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1111.0': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 '@smithy/types': 4.16.1 tslib: 2.8.1 + '@aws-sdk/token-providers@3.1116.0': + dependencies: + '@aws-sdk/core': 3.977.8 + '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/types': 3.974.5 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + '@aws-sdk/types@3.974.2': dependencies: - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@aws-sdk/types@3.974.5': + dependencies: + '@smithy/types': 4.17.2 tslib: 2.8.1 '@aws-sdk/util-format-url@3.972.37': dependencies: - '@aws-sdk/core': 3.977.1 + '@aws-sdk/core': 3.977.8 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.37': + '@aws-sdk/xml-builder@3.972.39': dependencies: '@smithy/types': 4.16.1 tslib: 2.8.1 @@ -9487,7 +9828,7 @@ snapshots: '@smithy/node-config-provider': 4.5.14 '@smithy/protocol-http': 5.5.14 '@smithy/signature-v4': 5.6.10 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 '@aws/lambda-invoke-store@0.3.0': {} @@ -9587,39 +9928,16 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.6': - dependencies: - '@babel/parser': 8.0.4 - '@babel/types': 8.0.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@types/jsesc': 2.5.1 - jsesc: 3.1.0 - '@babel/helper-globals@7.29.7': {} '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-string-parser@8.0.0': {} - '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-identifier@8.0.0-rc.6': {} - - '@babel/helper-validator-identifier@8.0.4': {} - '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 - '@babel/parser@8.0.0-rc.6': - dependencies: - '@babel/types': 8.0.4 - - '@babel/parser@8.0.4': - dependencies: - '@babel/types': 8.0.4 - '@babel/runtime@7.29.7': {} '@babel/runtime@8.0.0': {} @@ -9647,11 +9965,6 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/types@8.0.4': - dependencies: - '@babel/helper-string-parser': 8.0.0 - '@babel/helper-validator-identifier': 8.0.4 - '@bcoe/v8-coverage@1.0.2': {} '@blazediff/core@1.9.1': {} @@ -9701,14 +10014,14 @@ snapshots: dependencies: '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 - '@codemirror/commands@6.10.4': + '@codemirror/commands@6.11.0': dependencies: '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@codemirror/lang-angular@0.1.4': @@ -9748,7 +10061,7 @@ snapshots: '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/css': 1.3.4 '@lezer/html': 1.3.13 @@ -9764,7 +10077,7 @@ snapshots: '@codemirror/language': 6.12.4 '@codemirror/lint': 6.9.7 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/javascript': 1.5.4 @@ -9774,7 +10087,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 @@ -9798,7 +10111,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 @@ -9809,7 +10122,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/markdown': 1.7.2 @@ -9872,7 +10185,7 @@ snapshots: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/xml': 1.0.6 @@ -9915,7 +10228,7 @@ snapshots: '@codemirror/language@6.12.4': dependencies: '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 @@ -9928,23 +10241,23 @@ snapshots: '@codemirror/lint@6.9.7': dependencies: '@codemirror/state': 6.7.1 - '@codemirror/view': 6.43.6 + '@codemirror/view': 6.43.9 crelt: 1.0.7 '@codemirror/state@6.7.1': dependencies: '@marijn/find-cluster-break': 1.0.3 - '@codemirror/view@6.43.6': + '@codemirror/view@6.43.9': dependencies: '@codemirror/state': 6.7.1 crelt: 1.0.7 style-mod: 4.1.3 w3c-keyname: 2.2.8 - '@copilotkit/aimock@1.37.4(vitest@4.1.10)': + '@copilotkit/aimock@1.38.0(vitest@4.1.10)': optionalDependencies: - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@csstools/color-helpers@6.1.0': {} @@ -9992,14 +10305,14 @@ snapshots: '@d-fischer/connection@10.0.1': dependencies: - '@d-fischer/isomorphic-ws': 7.0.2(ws@8.21.1) + '@d-fischer/isomorphic-ws': 7.0.2(ws@8.21.3) '@d-fischer/logger': 4.2.4 '@d-fischer/shared-utils': 3.6.4 '@d-fischer/typed-event-emitter': 3.3.3 '@types/node': 20.19.43 '@types/ws': 8.18.1 tslib: 2.8.1 - ws: 8.21.1 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10010,9 +10323,9 @@ snapshots: '@d-fischer/escape-string-regexp@5.0.0': {} - '@d-fischer/isomorphic-ws@7.0.2(ws@8.21.1)': + '@d-fischer/isomorphic-ws@7.0.2(ws@8.21.3)': dependencies: - ws: 8.21.1 + ws: 8.21.3 '@d-fischer/logger@4.2.4': dependencies: @@ -10049,10 +10362,10 @@ snapshots: dependencies: '@snazzah/davey': 0.1.12(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) '@types/ws': 8.18.1 - discord-api-types: 0.38.52 + discord-api-types: 0.38.53 prism-media: 1.3.5 tslib: 2.8.1 - ws: 8.21.1 + ws: 8.21.3 transitivePeerDependencies: - '@discordjs/opus' - '@emnapi/core' @@ -10063,28 +10376,17 @@ snapshots: - opusscript - utf-8-validate - '@earendil-works/pi-tui@0.82.1': + '@earendil-works/pi-tui@0.84.2': dependencies: get-east-asian-width: 1.6.0 marked: 18.0.5 - '@emnapi/core@1.11.1': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - '@emnapi/core@1.11.2': dependencies: '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.11.2': dependencies: tslib: 2.8.1 @@ -10098,86 +10400,164 @@ snapshots: '@esbuild/aix-ppc64@0.28.1': optional: true + '@esbuild/aix-ppc64@0.28.2': + optional: true + '@esbuild/android-arm64@0.28.1': optional: true + '@esbuild/android-arm64@0.28.2': + optional: true + '@esbuild/android-arm@0.28.1': optional: true + '@esbuild/android-arm@0.28.2': + optional: true + '@esbuild/android-x64@0.28.1': optional: true + '@esbuild/android-x64@0.28.2': + optional: true + '@esbuild/darwin-arm64@0.28.1': optional: true + '@esbuild/darwin-arm64@0.28.2': + optional: true + '@esbuild/darwin-x64@0.28.1': optional: true + '@esbuild/darwin-x64@0.28.2': + optional: true + '@esbuild/freebsd-arm64@0.28.1': optional: true + '@esbuild/freebsd-arm64@0.28.2': + optional: true + '@esbuild/freebsd-x64@0.28.1': optional: true + '@esbuild/freebsd-x64@0.28.2': + optional: true + '@esbuild/linux-arm64@0.28.1': optional: true + '@esbuild/linux-arm64@0.28.2': + optional: true + '@esbuild/linux-arm@0.28.1': optional: true + '@esbuild/linux-arm@0.28.2': + optional: true + '@esbuild/linux-ia32@0.28.1': optional: true + '@esbuild/linux-ia32@0.28.2': + optional: true + '@esbuild/linux-loong64@0.28.1': optional: true + '@esbuild/linux-loong64@0.28.2': + optional: true + '@esbuild/linux-mips64el@0.28.1': optional: true + '@esbuild/linux-mips64el@0.28.2': + optional: true + '@esbuild/linux-ppc64@0.28.1': optional: true + '@esbuild/linux-ppc64@0.28.2': + optional: true + '@esbuild/linux-riscv64@0.28.1': optional: true + '@esbuild/linux-riscv64@0.28.2': + optional: true + '@esbuild/linux-s390x@0.28.1': optional: true + '@esbuild/linux-s390x@0.28.2': + optional: true + '@esbuild/linux-x64@0.28.1': optional: true + '@esbuild/linux-x64@0.28.2': + optional: true + '@esbuild/netbsd-arm64@0.28.1': optional: true + '@esbuild/netbsd-arm64@0.28.2': + optional: true + '@esbuild/netbsd-x64@0.28.1': optional: true + '@esbuild/netbsd-x64@0.28.2': + optional: true + '@esbuild/openbsd-arm64@0.28.1': optional: true + '@esbuild/openbsd-arm64@0.28.2': + optional: true + '@esbuild/openbsd-x64@0.28.1': optional: true + '@esbuild/openbsd-x64@0.28.2': + optional: true + '@esbuild/openharmony-arm64@0.28.1': optional: true + '@esbuild/openharmony-arm64@0.28.2': + optional: true + '@esbuild/sunos-x64@0.28.1': optional: true + '@esbuild/sunos-x64@0.28.2': + optional: true + '@esbuild/win32-arm64@0.28.1': optional: true + '@esbuild/win32-arm64@0.28.2': + optional: true + '@esbuild/win32-ia32@0.28.1': optional: true + '@esbuild/win32-ia32@0.28.2': + optional: true + '@esbuild/win32-x64@0.28.1': optional: true + '@esbuild/win32-x64@0.28.2': + optional: true + '@eshaz/web-worker@1.2.2': {} - '@exodus/bytes@1.15.1(@noble/hashes@2.2.0)': + '@exodus/bytes@1.15.1(@noble/hashes@2.3.0)': optionalDependencies: - '@noble/hashes': 2.2.0 + '@noble/hashes': 2.3.0 '@fidm/asn1@1.0.4': {} @@ -10199,55 +10579,55 @@ snapshots: '@gar/promise-retry@1.0.3': {} - '@github/copilot-darwin-arm64@1.0.75': + '@github/copilot-darwin-arm64@1.0.80': optional: true - '@github/copilot-darwin-x64@1.0.75': + '@github/copilot-darwin-x64@1.0.80': optional: true - '@github/copilot-linux-arm64@1.0.75': + '@github/copilot-linux-arm64@1.0.80': optional: true - '@github/copilot-linux-x64@1.0.75': + '@github/copilot-linux-x64@1.0.80': optional: true - '@github/copilot-linuxmusl-arm64@1.0.75': + '@github/copilot-linuxmusl-arm64@1.0.80': optional: true - '@github/copilot-linuxmusl-x64@1.0.75': + '@github/copilot-linuxmusl-x64@1.0.80': optional: true - '@github/copilot-sdk@1.0.7': + '@github/copilot-sdk@1.0.11': dependencies: - '@github/copilot': 1.0.75 + '@github/copilot': 1.0.80 koffi: 3.1.5 vscode-jsonrpc: 8.2.1 zod: 4.4.3 - '@github/copilot-win32-arm64@1.0.75': + '@github/copilot-win32-arm64@1.0.80': optional: true - '@github/copilot-win32-x64@1.0.75': + '@github/copilot-win32-x64@1.0.80': optional: true - '@github/copilot@1.0.75': + '@github/copilot@1.0.80': dependencies: detect-libc: 2.1.2 optionalDependencies: - '@github/copilot-darwin-arm64': 1.0.75 - '@github/copilot-darwin-x64': 1.0.75 - '@github/copilot-linux-arm64': 1.0.75 - '@github/copilot-linux-x64': 1.0.75 - '@github/copilot-linuxmusl-arm64': 1.0.75 - '@github/copilot-linuxmusl-x64': 1.0.75 - '@github/copilot-win32-arm64': 1.0.75 - '@github/copilot-win32-x64': 1.0.75 + '@github/copilot-darwin-arm64': 1.0.80 + '@github/copilot-darwin-x64': 1.0.80 + '@github/copilot-linux-arm64': 1.0.80 + '@github/copilot-linux-x64': 1.0.80 + '@github/copilot-linuxmusl-arm64': 1.0.80 + '@github/copilot-linuxmusl-x64': 1.0.80 + '@github/copilot-win32-arm64': 1.0.80 + '@github/copilot-win32-x64': 1.0.80 - '@google/genai@2.13.0(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2)': + '@google/genai@2.17.1(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(supports-color@10.2.2)': dependencies: google-auth-library: 10.9.1(supports-color@10.2.2) p-retry: 4.6.2 - protobufjs: 8.7.1 + protobufjs: 8.7.2 ws: 8.21.1 optionalDependencies: '@modelcontextprotocol/sdk': 1.30.0(supports-color@10.2.2)(zod@4.4.3) @@ -10277,7 +10657,7 @@ snapshots: dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 8.7.1 + protobufjs: 8.7.2 yargs: 17.7.3 '@hapi/boom@9.1.4': @@ -10286,7 +10666,7 @@ snapshots: '@hapi/hoek@9.3.0': {} - '@homebridge/ciao@1.3.10(supports-color@10.2.2)': + '@homebridge/ciao@1.3.12(supports-color@10.2.2)': dependencies: debug: 4.4.3(supports-color@10.2.2) fast-deep-equal: 3.1.3 @@ -10295,19 +10675,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@hono/node-server@2.0.12(hono@4.13.2)': + '@hono/node-server@2.1.1(hono@4.13.2)': dependencies: hono: 4.13.2 '@huggingface/jinja@0.3.4': optional: true - '@huggingface/transformers@3.0.2(@types/node@26.1.2)': + '@huggingface/transformers@3.0.2(@types/node@26.2.0)': dependencies: '@huggingface/jinja': 0.3.4 onnxruntime-node: 1.19.2 onnxruntime-web: 1.21.0-dev.20241024-d9ca84ef96 - sharp: 0.35.3(@types/node@26.1.2) + sharp: 0.35.3(@types/node@26.2.0) transitivePeerDependencies: - '@types/node' optional: true @@ -10494,52 +10874,53 @@ snapshots: '@koromix/koffi-win32-x64@3.1.5': optional: true - '@lancedb/lancedb-darwin-arm64@0.31.0': + '@lancedb/lancedb-darwin-arm64@0.37.1': optional: true - '@lancedb/lancedb-linux-arm64-gnu@0.31.0': + '@lancedb/lancedb-linux-arm64-gnu@0.37.1': optional: true - '@lancedb/lancedb-linux-arm64-musl@0.31.0': + '@lancedb/lancedb-linux-arm64-musl@0.37.1': optional: true - '@lancedb/lancedb-linux-x64-gnu@0.31.0': + '@lancedb/lancedb-linux-x64-gnu@0.37.1': optional: true - '@lancedb/lancedb-linux-x64-musl@0.31.0': + '@lancedb/lancedb-linux-x64-musl@0.37.1': optional: true - '@lancedb/lancedb-win32-arm64-msvc@0.31.0': + '@lancedb/lancedb-win32-arm64-msvc@0.37.1': optional: true - '@lancedb/lancedb-win32-x64-msvc@0.31.0': + '@lancedb/lancedb-win32-x64-msvc@0.37.1': optional: true - '@lancedb/lancedb@0.31.0(@types/node@26.1.2)(apache-arrow@18.1.0)': + '@lancedb/lancedb@0.37.1(@types/node@26.2.0)(apache-arrow@18.1.0)': dependencies: + '@opentelemetry/api': 1.9.1 apache-arrow: 18.1.0 reflect-metadata: 0.2.2 optionalDependencies: - '@huggingface/transformers': 3.0.2(@types/node@26.1.2) - '@lancedb/lancedb-darwin-arm64': 0.31.0 - '@lancedb/lancedb-linux-arm64-gnu': 0.31.0 - '@lancedb/lancedb-linux-arm64-musl': 0.31.0 - '@lancedb/lancedb-linux-x64-gnu': 0.31.0 - '@lancedb/lancedb-linux-x64-musl': 0.31.0 - '@lancedb/lancedb-win32-arm64-msvc': 0.31.0 - '@lancedb/lancedb-win32-x64-msvc': 0.31.0 + '@huggingface/transformers': 3.0.2(@types/node@26.2.0) + '@lancedb/lancedb-darwin-arm64': 0.37.1 + '@lancedb/lancedb-linux-arm64-gnu': 0.37.1 + '@lancedb/lancedb-linux-arm64-musl': 0.37.1 + '@lancedb/lancedb-linux-x64-gnu': 0.37.1 + '@lancedb/lancedb-linux-x64-musl': 0.37.1 + '@lancedb/lancedb-win32-arm64-msvc': 0.37.1 + '@lancedb/lancedb-win32-x64-msvc': 0.37.1 + '@types/node': 26.2.0 openai: 4.29.2 transitivePeerDependencies: - - '@types/node' - encoding - '@larksuiteoapi/node-sdk@1.71.1(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': + '@larksuiteoapi/node-sdk@1.73.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - axios: 1.18.1(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + axios: 1.19.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) lodash.identity: 3.0.0 lodash.merge: 4.6.2 lodash.pickby: 4.6.0 - protobufjs: 8.7.1 + protobufjs: 8.7.2 qs: 6.15.3 ws: 8.21.1 transitivePeerDependencies: @@ -10660,7 +11041,7 @@ snapshots: '@lit-labs/ssr-dom-shim@1.6.0': {} - '@lit-labs/ssr@4.1.0(@types/node@24.13.3)': + '@lit-labs/ssr@4.1.0(@types/node@26.2.0)': dependencies: '@lit-labs/ssr-client': 1.1.8 '@lit-labs/ssr-dom-shim': 1.6.0 @@ -10673,7 +11054,7 @@ snapshots: node-fetch: 3.3.2 parse5: 7.3.0 optionalDependencies: - '@types/node': 24.13.3 + '@types/node': 26.2.0 '@lit/context@1.1.6': dependencies: @@ -10691,43 +11072,43 @@ snapshots: dependencies: '@lit/reactive-element': 2.1.2 - '@lydell/node-pty-darwin-arm64@1.2.0-beta.14': + '@lydell/node-pty-darwin-arm64@1.2.0-beta.15': optional: true - '@lydell/node-pty-darwin-x64@1.2.0-beta.14': + '@lydell/node-pty-darwin-x64@1.2.0-beta.15': optional: true - '@lydell/node-pty-linux-arm64@1.2.0-beta.14': + '@lydell/node-pty-linux-arm64@1.2.0-beta.15': optional: true - '@lydell/node-pty-linux-x64@1.2.0-beta.14': + '@lydell/node-pty-linux-x64@1.2.0-beta.15': optional: true - '@lydell/node-pty-win32-arm64@1.2.0-beta.14': + '@lydell/node-pty-win32-arm64@1.2.0-beta.15': optional: true - '@lydell/node-pty-win32-x64@1.2.0-beta.14': + '@lydell/node-pty-win32-x64@1.2.0-beta.15': optional: true - '@lydell/node-pty@1.2.0-beta.14': + '@lydell/node-pty@1.2.0-beta.15': optionalDependencies: - '@lydell/node-pty-darwin-arm64': 1.2.0-beta.14 - '@lydell/node-pty-darwin-x64': 1.2.0-beta.14 - '@lydell/node-pty-linux-arm64': 1.2.0-beta.14 - '@lydell/node-pty-linux-x64': 1.2.0-beta.14 - '@lydell/node-pty-win32-arm64': 1.2.0-beta.14 - '@lydell/node-pty-win32-x64': 1.2.0-beta.14 + '@lydell/node-pty-darwin-arm64': 1.2.0-beta.15 + '@lydell/node-pty-darwin-x64': 1.2.0-beta.15 + '@lydell/node-pty-linux-arm64': 1.2.0-beta.15 + '@lydell/node-pty-linux-x64': 1.2.0-beta.15 + '@lydell/node-pty-win32-arm64': 1.2.0-beta.15 + '@lydell/node-pty-win32-x64': 1.2.0-beta.15 '@marijn/find-cluster-break@1.0.3': {} - '@matrix-org/matrix-sdk-crypto-nodejs@0.6.1(supports-color@10.2.2)': + '@matrix-org/matrix-sdk-crypto-nodejs@0.6.6(supports-color@10.2.2)': dependencies: https-proxy-agent: 7.0.6(supports-color@10.2.2) node-downloader-helper: 2.1.11 transitivePeerDependencies: - supports-color - '@matrix-org/matrix-sdk-crypto-wasm@18.4.0': {} + '@matrix-org/matrix-sdk-crypto-wasm@18.5.0': {} '@mdx-js/mdx@3.1.1(supports-color@10.2.2)': dependencies: @@ -10735,7 +11116,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdx': 2.0.14 - acorn: 8.17.0 + acorn: 8.18.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -10744,7 +11125,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6(supports-color@10.2.2) markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.17.0) + recma-jsx: 1.0.1(acorn@8.18.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0(supports-color@10.2.2) remark-mdx: 3.1.1(supports-color@10.2.2) @@ -10764,23 +11145,23 @@ snapshots: node-pty: 1.2.0-beta.14 semver: 7.8.5 - '@microsoft/teams.api@2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': + '@microsoft/teams.api@2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@microsoft/teams.cards': 2.0.14 - '@microsoft/teams.common': 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + '@microsoft/teams.cards': 2.0.15 + '@microsoft/teams.common': 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) jwt-decode: 4.0.0 qs: 6.15.3 transitivePeerDependencies: - debug - supports-color - '@microsoft/teams.apps@2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': + '@microsoft/teams.apps@2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@azure/msal-node': 5.4.2 - '@microsoft/teams.api': 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) - '@microsoft/teams.common': 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) - '@microsoft/teams.graph': 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) - axios: 1.18.1(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + '@microsoft/teams.api': 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + '@microsoft/teams.common': 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + '@microsoft/teams.graph': 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + axios: 1.19.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) cors: 2.8.6 express: 5.2.1(supports-color@10.2.2) jsonwebtoken: 9.0.3 @@ -10790,29 +11171,27 @@ snapshots: - debug - supports-color - '@microsoft/teams.cards@2.0.14': {} + '@microsoft/teams.cards@2.0.15': {} - '@microsoft/teams.common@2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': + '@microsoft/teams.common@2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - axios: 1.18.1(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + axios: 1.19.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - debug - supports-color - '@microsoft/teams.graph@2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': + '@microsoft/teams.graph@2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@microsoft/teams.common': 2.0.14(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) + '@microsoft/teams.common': 2.0.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) qs: 6.15.3 transitivePeerDependencies: - debug - supports-color - '@minhducsun2002/leb128@1.0.0': {} - '@mistralai/mistralai@2.5.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/semantic-conventions': 1.43.0 - ws: 8.21.1 + ws: 8.21.3 zod: 4.4.3 zod-to-json-schema: 3.25.2(zod@4.4.3) optionalDependencies: @@ -10832,7 +11211,7 @@ snapshots: '@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3)': dependencies: - '@hono/node-server': 2.0.12(hono@4.13.2) + '@hono/node-server': 2.1.1(hono@4.13.2) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -10843,7 +11222,7 @@ snapshots: express: 5.2.1(supports-color@10.2.2) express-rate-limit: 8.6.2(express@5.2.1(supports-color@10.2.2))(supports-color@10.2.2) hono: 4.13.2 - jose: 6.2.4 + jose: 6.2.9 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -10854,13 +11233,6 @@ snapshots: '@mozilla/readability@0.6.0': {} - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.3 - optional: true - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: '@emnapi/core': 1.11.2 @@ -10870,7 +11242,7 @@ snapshots: '@noble/ciphers@2.1.1': {} - '@noble/ciphers@2.2.0': {} + '@noble/ciphers@2.3.0': {} '@noble/curves@1.9.7': dependencies: @@ -10880,9 +11252,9 @@ snapshots: dependencies: '@noble/hashes': 2.0.1 - '@noble/curves@2.2.0': + '@noble/curves@2.3.0': dependencies: - '@noble/hashes': 2.2.0 + '@noble/hashes': 2.3.0 '@noble/ed25519@3.1.0': {} @@ -10890,7 +11262,7 @@ snapshots: '@noble/hashes@2.0.1': {} - '@noble/hashes@2.2.0': {} + '@noble/hashes@2.3.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -10952,7 +11324,7 @@ snapshots: '@openai/codex@0.148.0-win32-x64': optional: true - '@openclaw/crabline@0.1.11': + '@openclaw/crabline@0.1.17': dependencies: '@types/node': 22.20.1 commander: 15.0.0 @@ -10968,7 +11340,7 @@ snapshots: - bufferutil - utf-8-validate - '@openclaw/fs-safe@0.5.5': + '@openclaw/fs-safe@0.5.6': optionalDependencies: jszip: 3.10.1 tar: 7.5.22 @@ -10977,9 +11349,9 @@ snapshots: dependencies: ghostty-web: 0.4.0 - '@openclaw/proxyline@0.3.4(undici@8.9.0)': + '@openclaw/proxyline@0.3.7(undici@8.10.0)': dependencies: - undici: 8.9.0 + undici: 8.10.0 '@openclaw/uirouter@0.1.1': {} @@ -11207,10 +11579,10 @@ snapshots: '@opentelemetry/semantic-conventions@1.43.0': {} - '@oxc-project/types@0.139.0': {} - '@oxc-project/types@0.140.0': {} + '@oxc-project/types@0.146.0': {} + '@oxfmt/binding-android-arm-eabi@0.60.0': optional: true @@ -11286,61 +11658,61 @@ snapshots: '@oxlint-tsgolint/win32-x64@7.0.2001': optional: true - '@oxlint/binding-android-arm-eabi@1.75.0': + '@oxlint/binding-android-arm-eabi@1.78.0': optional: true - '@oxlint/binding-android-arm64@1.75.0': + '@oxlint/binding-android-arm64@1.78.0': optional: true - '@oxlint/binding-darwin-arm64@1.75.0': + '@oxlint/binding-darwin-arm64@1.78.0': optional: true - '@oxlint/binding-darwin-x64@1.75.0': + '@oxlint/binding-darwin-x64@1.78.0': optional: true - '@oxlint/binding-freebsd-x64@1.75.0': + '@oxlint/binding-freebsd-x64@1.78.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.75.0': + '@oxlint/binding-linux-arm-gnueabihf@1.78.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.75.0': + '@oxlint/binding-linux-arm-musleabihf@1.78.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.75.0': + '@oxlint/binding-linux-arm64-gnu@1.78.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.75.0': + '@oxlint/binding-linux-arm64-musl@1.78.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.75.0': + '@oxlint/binding-linux-ppc64-gnu@1.78.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.75.0': + '@oxlint/binding-linux-riscv64-gnu@1.78.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.75.0': + '@oxlint/binding-linux-riscv64-musl@1.78.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.75.0': + '@oxlint/binding-linux-s390x-gnu@1.78.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.75.0': + '@oxlint/binding-linux-x64-gnu@1.78.0': optional: true - '@oxlint/binding-linux-x64-musl@1.75.0': + '@oxlint/binding-linux-x64-musl@1.78.0': optional: true - '@oxlint/binding-openharmony-arm64@1.75.0': + '@oxlint/binding-openharmony-arm64@1.78.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.75.0': + '@oxlint/binding-win32-arm64-msvc@1.78.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.75.0': + '@oxlint/binding-win32-ia32-msvc@1.78.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.75.0': + '@oxlint/binding-win32-x64-msvc@1.78.0': optional: true '@panzoom/panzoom@4.6.2': {} @@ -11443,10 +11815,10 @@ snapshots: tslib: 2.8.1 tsyringe: 4.10.0 - '@pierre/diffs@1.2.12(@shikijs/themes@4.3.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@pierre/diffs@1.3.5(@shikijs/themes@4.4.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@pierre/theme': 1.1.0 - '@pierre/theming': 0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(shiki@4.3.1) + '@pierre/theme': 2.0.0 + '@pierre/theming': 1.0.1(@pierre/theme@2.0.0)(@shikijs/themes@4.4.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(shiki@4.3.1) '@shikijs/transformers': 4.3.1 diff: 9.0.0 hast-util-to-html: 9.0.5 @@ -11457,12 +11829,12 @@ snapshots: transitivePeerDependencies: - '@shikijs/themes' - '@pierre/theme@1.1.0': {} + '@pierre/theme@2.0.0': {} - '@pierre/theming@0.0.2(@pierre/theme@1.1.0)(@shikijs/themes@4.3.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(shiki@4.3.1)': + '@pierre/theming@1.0.1(@pierre/theme@2.0.0)(@shikijs/themes@4.4.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(shiki@4.3.1)': optionalDependencies: - '@pierre/theme': 1.1.0 - '@shikijs/themes': 4.3.1 + '@pierre/theme': 2.0.0 + '@shikijs/themes': 4.4.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) shiki: 4.3.1 @@ -11477,83 +11849,79 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.1.5': + '@rolldown/binding-android-arm-eabi@1.2.5': optional: true '@rolldown/binding-android-arm64@1.2.0': optional: true - '@rolldown/binding-darwin-arm64@1.1.5': + '@rolldown/binding-android-arm64@1.2.5': optional: true '@rolldown/binding-darwin-arm64@1.2.0': optional: true - '@rolldown/binding-darwin-x64@1.1.5': + '@rolldown/binding-darwin-arm64@1.2.5': optional: true '@rolldown/binding-darwin-x64@1.2.0': optional: true - '@rolldown/binding-freebsd-x64@1.1.5': + '@rolldown/binding-darwin-x64@1.2.5': optional: true '@rolldown/binding-freebsd-x64@1.2.0': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + '@rolldown/binding-freebsd-x64@1.2.5': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.2.0': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.5': + '@rolldown/binding-linux-arm-gnueabihf@1.2.5': optional: true '@rolldown/binding-linux-arm64-gnu@1.2.0': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.5': + '@rolldown/binding-linux-arm64-gnu@1.2.5': optional: true '@rolldown/binding-linux-arm64-musl@1.2.0': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.5': + '@rolldown/binding-linux-arm64-musl@1.2.5': optional: true '@rolldown/binding-linux-ppc64-gnu@1.2.0': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.5': + '@rolldown/binding-linux-ppc64-gnu@1.2.5': optional: true '@rolldown/binding-linux-s390x-gnu@1.2.0': optional: true - '@rolldown/binding-linux-x64-gnu@1.1.5': + '@rolldown/binding-linux-s390x-gnu@1.2.5': optional: true '@rolldown/binding-linux-x64-gnu@1.2.0': optional: true - '@rolldown/binding-linux-x64-musl@1.1.5': + '@rolldown/binding-linux-x64-gnu@1.2.5': optional: true '@rolldown/binding-linux-x64-musl@1.2.0': optional: true - '@rolldown/binding-openharmony-arm64@1.1.5': + '@rolldown/binding-linux-x64-musl@1.2.5': optional: true '@rolldown/binding-openharmony-arm64@1.2.0': optional: true - '@rolldown/binding-wasm32-wasi@1.1.5': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@rolldown/binding-openharmony-arm64@1.2.5': optional: true '@rolldown/binding-wasm32-wasi@1.2.0': @@ -11563,18 +11931,18 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.5': - optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.0': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.5': + '@rolldown/binding-win32-arm64-msvc@1.2.5': optional: true '@rolldown/binding-win32-x64-msvc@1.2.0': optional: true + '@rolldown/binding-win32-x64-msvc@1.2.5': + optional: true + '@rolldown/pluginutils@1.0.1': {} '@scure/base@2.0.0': {} @@ -11600,31 +11968,64 @@ snapshots: '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 + '@shikijs/core@4.4.3': + dependencies: + '@shikijs/primitive': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@4.3.1': dependencies: '@shikijs/types': 4.3.1 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.6 + '@shikijs/engine-javascript@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + '@shikijs/engine-oniguruma@4.3.1': dependencies: '@shikijs/types': 4.3.1 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@4.3.1': dependencies: '@shikijs/types': 4.3.1 + '@shikijs/langs@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/primitive@4.3.1': dependencies: '@shikijs/types': 4.3.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.5 + '@shikijs/primitive@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + '@shikijs/themes@4.3.1': dependencies: '@shikijs/types': 4.3.1 + '@shikijs/themes@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/transformers@4.3.1': dependencies: '@shikijs/core': 4.3.1 @@ -11635,6 +12036,11 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.5 + '@shikijs/types@4.4.3': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + '@shikijs/vscode-textmate@10.0.2': {} '@shinyoshiaki/binary-data@0.6.1': @@ -11642,8 +12048,6 @@ snapshots: generate-function: 2.3.1 is-plain-object: 2.0.4 - '@shinyoshiaki/jspack@0.0.6': {} - '@shoelace-style/animations@1.2.0': {} '@shoelace-style/localize@3.2.3': {} @@ -11703,21 +12107,21 @@ snapshots: '@slack/logger@5.0.0': dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@slack/oauth@4.0.0': dependencies: '@slack/logger': 5.0.0 '@slack/web-api': 8.0.0 '@types/jsonwebtoken': 9.0.10 - '@types/node': 26.1.2 + '@types/node': 26.2.0 jsonwebtoken: 9.0.3 '@slack/socket-mode@3.0.0(undici@7.29.0)': dependencies: '@slack/logger': 5.0.0 '@slack/web-api': 8.0.0 - '@types/node': 26.1.2 + '@types/node': 26.2.0 eventemitter3: 5.0.4 undici: 7.29.0 @@ -11727,7 +12131,7 @@ snapshots: dependencies: '@slack/logger': 5.0.0 '@slack/types': 3.0.0 - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/retry': 0.12.0 eventemitter3: 5.0.4 p-queue: 6.6.2 @@ -11744,21 +12148,38 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 + '@smithy/core@3.33.3': + dependencies: + '@smithy/types': 4.17.2 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.4.14': dependencies: '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.5.2': + dependencies: + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@smithy/fetch-http-handler@5.6.11': dependencies: '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.7.2': + dependencies: + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@smithy/hash-node@4.4.14': dependencies: - '@smithy/core': 3.30.0 + '@smithy/core': 3.33.3 tslib: 2.8.1 '@smithy/invalid-dependency@4.4.14': @@ -11771,10 +12192,16 @@ snapshots: '@smithy/core': 3.30.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.9.11': + '@smithy/node-http-handler@4.11.2': dependencies: - '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.11.3': + dependencies: + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@smithy/protocol-http@5.5.14': @@ -11782,21 +12209,31 @@ snapshots: '@smithy/core': 3.30.0 tslib: 2.8.1 - '@smithy/shared-ini-file-loader@4.6.14': + '@smithy/shared-ini-file-loader@4.7.2': dependencies: - '@smithy/core': 3.30.0 + '@smithy/core': 3.33.3 tslib: 2.8.1 '@smithy/signature-v4@5.6.10': dependencies: '@smithy/core': 3.30.0 - '@smithy/types': 4.16.1 + '@smithy/types': 4.17.2 + tslib: 2.8.1 + + '@smithy/signature-v4@5.7.3': + dependencies: + '@smithy/core': 3.33.3 + '@smithy/types': 4.17.2 tslib: 2.8.1 '@smithy/types@4.16.1': dependencies: tslib: 2.8.1 + '@smithy/types@4.17.2': + dependencies: + tslib: 2.8.1 + '@snazzah/davey-android-arm-eabi@0.1.12': optional: true @@ -11885,24 +12322,24 @@ snapshots: '@thi.ng/errors@2.6.16': {} - '@tloncorp/tlon-skill-darwin-arm64@0.4.5': + '@tloncorp/tlon-skill-darwin-arm64@0.5.0': optional: true - '@tloncorp/tlon-skill-darwin-x64@0.4.5': + '@tloncorp/tlon-skill-darwin-x64@0.5.0': optional: true - '@tloncorp/tlon-skill-linux-arm64@0.4.5': + '@tloncorp/tlon-skill-linux-arm64@0.5.0': optional: true - '@tloncorp/tlon-skill-linux-x64@0.4.5': + '@tloncorp/tlon-skill-linux-x64@0.5.0': optional: true - '@tloncorp/tlon-skill@0.4.5': + '@tloncorp/tlon-skill@0.5.0': optionalDependencies: - '@tloncorp/tlon-skill-darwin-arm64': 0.4.5 - '@tloncorp/tlon-skill-darwin-x64': 0.4.5 - '@tloncorp/tlon-skill-linux-arm64': 0.4.5 - '@tloncorp/tlon-skill-linux-x64': 0.4.5 + '@tloncorp/tlon-skill-darwin-arm64': 0.5.0 + '@tloncorp/tlon-skill-darwin-x64': 0.5.0 + '@tloncorp/tlon-skill-linux-arm64': 0.5.0 + '@tloncorp/tlon-skill-linux-x64': 0.5.0 '@tokenizer/inflate@0.4.1(supports-color@10.2.2)': dependencies: @@ -11913,42 +12350,42 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@trycua/cua-driver-darwin-arm64@0.19.3': + '@trycua/cua-driver-darwin-arm64@0.20.0': optional: true - '@trycua/cua-driver-darwin-x64@0.19.3': + '@trycua/cua-driver-darwin-x64@0.20.0': optional: true - '@trycua/cua-driver-linux-arm64-gnu@0.19.3': + '@trycua/cua-driver-linux-arm64-gnu@0.20.0': optional: true - '@trycua/cua-driver-linux-x64-gnu@0.19.3': + '@trycua/cua-driver-linux-x64-gnu@0.20.0': optional: true - '@trycua/cua-driver-win32-arm64-msvc@0.19.3': + '@trycua/cua-driver-win32-arm64-msvc@0.20.0': optional: true - '@trycua/cua-driver-win32-x64-msvc@0.19.3': + '@trycua/cua-driver-win32-x64-msvc@0.20.0': optional: true - '@trycua/cua-driver@0.19.3': + '@trycua/cua-driver@0.20.0': dependencies: '@ubjs/core': 0.31.0-3 '@ubjs/node': 0.31.0-3 optionalDependencies: - '@trycua/cua-driver-darwin-arm64': 0.19.3 - '@trycua/cua-driver-darwin-x64': 0.19.3 - '@trycua/cua-driver-linux-arm64-gnu': 0.19.3 - '@trycua/cua-driver-linux-x64-gnu': 0.19.3 - '@trycua/cua-driver-win32-arm64-msvc': 0.19.3 - '@trycua/cua-driver-win32-x64-msvc': 0.19.3 + '@trycua/cua-driver-darwin-arm64': 0.20.0 + '@trycua/cua-driver-darwin-x64': 0.20.0 + '@trycua/cua-driver-linux-arm64-gnu': 0.20.0 + '@trycua/cua-driver-linux-x64-gnu': 0.20.0 + '@trycua/cua-driver-win32-arm64-msvc': 0.20.0 + '@trycua/cua-driver-win32-x64-msvc': 0.20.0 '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@5.0.0': dependencies: '@tufjs/canonical-json': 2.0.0 - minimatch: 10.2.5 + minimatch: 10.2.6 '@twurple/api-call@8.1.4': dependencies: @@ -11995,7 +12432,7 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/chai@5.2.3': dependencies: @@ -12008,7 +12445,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/debug@4.1.13': dependencies: @@ -12032,7 +12469,7 @@ snapshots: '@types/express-serve-static-core@5.1.2': dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -12051,8 +12488,6 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/jsesc@2.5.1': {} - '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 @@ -12108,6 +12543,10 @@ snapshots: dependencies: undici-types: 8.3.0 + '@types/node@26.2.0': + dependencies: + undici-types: 8.3.0 + '@types/qs@6.15.1': {} '@types/range-parser@1.2.7': {} @@ -12118,16 +12557,16 @@ snapshots: '@types/retry@0.12.0': {} - '@types/semver@7.7.1': {} + '@types/semver@7.8.0': {} '@types/send@1.2.1': dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/trusted-types@2.0.7': {} @@ -12139,11 +12578,11 @@ snapshots: '@types/web-push@3.6.4': dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@types/ws@8.18.1': dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260707.2': optional: true @@ -12176,66 +12615,6 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260707.2 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260707.2 - '@typescript/typescript-aix-ppc64@7.0.2': - optional: true - - '@typescript/typescript-darwin-arm64@7.0.2': - optional: true - - '@typescript/typescript-darwin-x64@7.0.2': - optional: true - - '@typescript/typescript-freebsd-arm64@7.0.2': - optional: true - - '@typescript/typescript-freebsd-x64@7.0.2': - optional: true - - '@typescript/typescript-linux-arm64@7.0.2': - optional: true - - '@typescript/typescript-linux-arm@7.0.2': - optional: true - - '@typescript/typescript-linux-loong64@7.0.2': - optional: true - - '@typescript/typescript-linux-mips64el@7.0.2': - optional: true - - '@typescript/typescript-linux-ppc64@7.0.2': - optional: true - - '@typescript/typescript-linux-riscv64@7.0.2': - optional: true - - '@typescript/typescript-linux-s390x@7.0.2': - optional: true - - '@typescript/typescript-linux-x64@7.0.2': - optional: true - - '@typescript/typescript-netbsd-arm64@7.0.2': - optional: true - - '@typescript/typescript-netbsd-x64@7.0.2': - optional: true - - '@typescript/typescript-openbsd-arm64@7.0.2': - optional: true - - '@typescript/typescript-openbsd-x64@7.0.2': - optional: true - - '@typescript/typescript-sunos-x64@7.0.2': - optional: true - - '@typescript/typescript-win32-arm64@7.0.2': - optional: true - - '@typescript/typescript-win32-x64@7.0.2': - optional: true - '@typespec/ts-http-runtime@0.3.7(supports-color@10.2.2)': dependencies: http-proxy-agent: 7.0.2(supports-color@10.2.2) @@ -12285,68 +12664,36 @@ snapshots: '@urbit/aura@3.0.0': {} - '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10)': + '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10)': dependencies: - '@vitest/browser': 4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + '@vitest/browser': 4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) playwright: 1.62.1 tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10)': - dependencies: - '@vitest/browser': 4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - playwright: 1.62.1 - tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - - '@vitest/browser@4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10)': + '@vitest/browser@4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/utils': 4.1.10 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - ws: 8.21.1 + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) + ws: 8.21.3 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10)': - dependencies: - '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - '@vitest/utils': 4.1.10 - magic-string: 0.30.21 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - ws: 8.21.1 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - '@vitest/coverage-v8@4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10)': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -12359,9 +12706,9 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/browser': 4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10) '@vitest/expect@4.1.10': dependencies: @@ -12372,21 +12719,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) - - '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 4.1.10 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -12433,6 +12772,80 @@ snapshots: dependencies: '@wasm-audio-decoders/common': 9.0.7 + '@yuku-codegen/binding-android-arm64@0.8.7': + optional: true + + '@yuku-codegen/binding-darwin-arm64@0.8.7': + optional: true + + '@yuku-codegen/binding-darwin-x64@0.8.7': + optional: true + + '@yuku-codegen/binding-freebsd-x64@0.8.7': + optional: true + + '@yuku-codegen/binding-linux-arm-gnu@0.8.7': + optional: true + + '@yuku-codegen/binding-linux-arm-musl@0.8.7': + optional: true + + '@yuku-codegen/binding-linux-arm64-gnu@0.8.7': + optional: true + + '@yuku-codegen/binding-linux-arm64-musl@0.8.7': + optional: true + + '@yuku-codegen/binding-linux-x64-gnu@0.8.7': + optional: true + + '@yuku-codegen/binding-linux-x64-musl@0.8.7': + optional: true + + '@yuku-codegen/binding-win32-arm64@0.8.7': + optional: true + + '@yuku-codegen/binding-win32-x64@0.8.7': + optional: true + + '@yuku-parser/binding-android-arm64@0.8.7': + optional: true + + '@yuku-parser/binding-darwin-arm64@0.8.7': + optional: true + + '@yuku-parser/binding-darwin-x64@0.8.7': + optional: true + + '@yuku-parser/binding-freebsd-x64@0.8.7': + optional: true + + '@yuku-parser/binding-linux-arm-gnu@0.8.7': + optional: true + + '@yuku-parser/binding-linux-arm-musl@0.8.7': + optional: true + + '@yuku-parser/binding-linux-arm64-gnu@0.8.7': + optional: true + + '@yuku-parser/binding-linux-arm64-musl@0.8.7': + optional: true + + '@yuku-parser/binding-linux-x64-gnu@0.8.7': + optional: true + + '@yuku-parser/binding-linux-x64-musl@0.8.7': + optional: true + + '@yuku-parser/binding-win32-arm64@0.8.7': + optional: true + + '@yuku-parser/binding-win32-x64@0.8.7': + optional: true + + '@yuku-toolchain/types@0.8.7': {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -12442,26 +12855,24 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.17.0): + acorn-jsx@5.3.2(acorn@8.18.0): dependencies: - acorn: 8.17.0 + acorn: 8.18.0 - acorn@8.17.0: {} + acorn@8.18.0: {} acpx@0.13.1: dependencies: '@agentclientprotocol/sdk': 1.3.0(zod@4.4.3) commander: 15.0.0 skillflag: 0.2.1 - tsx: 4.23.1 + tsx: 4.23.12 zod: 4.4.3 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - aes-js@3.1.2: {} - agent-base@6.0.2(supports-color@10.2.2): dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -12518,6 +12929,8 @@ snapshots: argparse@2.0.1: {} + argparse@3.0.0: {} + array-back@3.1.0: {} array-back@6.2.3: {} @@ -12537,12 +12950,6 @@ snapshots: assertion-error@2.0.1: {} - ast-kit@3.0.0: - dependencies: - '@babel/parser': 8.0.4 - estree-walker: 3.0.3 - pathe: 2.0.3 - ast-v8-to-istanbul@1.0.5: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -12576,7 +12983,7 @@ snapshots: audio-type@2.4.2: {} - axios@1.18.1(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2): + axios@1.19.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2): dependencies: follow-redirects: 1.16.0(debug@4.4.3(supports-color@10.2.2)) form-data: 4.0.6 @@ -12590,7 +12997,7 @@ snapshots: bail@2.0.2: {} - baileys@7.0.0-rc13(audio-decode@2.2.3)(sharp@0.35.3(@types/node@26.1.2))(supports-color@10.2.2): + baileys@7.0.0-rc14(audio-decode@2.2.3)(sharp@0.35.3(@types/node@26.2.0))(supports-color@10.2.2): dependencies: '@cacheable/node-cache': 1.7.6 '@hapi/boom': 9.1.4 @@ -12600,12 +13007,12 @@ snapshots: music-metadata: 11.14.0(supports-color@10.2.2) p-queue: 9.3.3 pino: 9.14.0 - protobufjs: 8.7.1 + protobufjs: 8.7.2 whatsapp-rust-bridge: 0.5.4 ws: 8.21.1 optionalDependencies: audio-decode: 2.2.3 - sharp: 0.35.3(@types/node@26.1.2) + sharp: 0.35.3(@types/node@26.2.0) transitivePeerDependencies: - bufferutil - supports-color @@ -12657,8 +13064,6 @@ snapshots: bignumber.js@9.3.1: {} - birpc@4.0.0: {} - bn.js@4.12.5: {} body-parser@2.3.0(supports-color@10.2.2): @@ -12693,8 +13098,6 @@ snapshots: dependencies: base-x: 5.0.1 - buffer-crc32@1.0.0: {} - buffer-equal-constant-time@1.0.1: {} buffer-from@1.1.2: {} @@ -12787,7 +13190,7 @@ snapshots: cjs-module-lexer@2.2.0: {} - clawpdf@0.3.0: {} + clawpdf@0.3.1: {} cliui@6.0.0: dependencies: @@ -12915,17 +13318,13 @@ snapshots: data-uri-to-buffer@4.0.1: {} - data-urls@7.0.0(@noble/hashes@2.2.0): + data-urls@7.0.0(@noble/hashes@2.3.0): dependencies: whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1(@noble/hashes@2.2.0) + whatwg-url: 16.0.1(@noble/hashes@2.3.0) transitivePeerDependencies: - '@noble/hashes' - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.29.7 - date-fns@4.4.0: {} debug@4.4.0(supports-color@10.2.2): @@ -12989,7 +13388,7 @@ snapshots: dijkstrajs@1.0.3: {} - discord-api-types@0.38.52: {} + discord-api-types@0.38.53: {} dns-packet@5.6.1: dependencies: @@ -13103,7 +13502,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.17.0 + acorn: 8.18.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 @@ -13136,6 +13535,35 @@ snapshots: '@esbuild/win32-ia32': 0.28.1 '@esbuild/win32-x64': 0.28.1 + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -13197,7 +13625,7 @@ snapshots: dependencies: eventsource-parser: 3.1.1 - execa@10.0.0: + execa@10.0.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 figures: 6.1.0 @@ -13206,7 +13634,6 @@ snapshots: is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 6.0.0 - path-key: 4.0.0 pretty-ms: 9.3.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 @@ -13219,7 +13646,7 @@ snapshots: dependencies: debug: 4.4.3(supports-color@10.2.2) express: 5.2.1(supports-color@10.2.2) - ip-address: 10.3.1 + ip-address: 10.5.0 transitivePeerDependencies: - supports-color @@ -13309,7 +13736,7 @@ snapshots: dependencies: flat-cache: 6.1.23 - file-type@22.0.1(supports-color@10.2.2): + file-type@22.0.2(supports-color@10.2.2): dependencies: '@tokenizer/inflate': 0.4.1(supports-color@10.2.2) strtok3: 10.3.5 @@ -13455,7 +13882,7 @@ snapshots: glob@13.0.6: dependencies: - minimatch: 10.2.5 + minimatch: 10.2.6 minipass: 7.1.3 path-scurry: 2.0.2 @@ -13591,7 +14018,7 @@ snapshots: dependencies: '@types/hast': 3.0.5 - highlight.js@11.11.1: {} + highlight.js@11.12.0: {} hono@4.13.2: {} @@ -13605,9 +14032,9 @@ snapshots: dependencies: lru-cache: 11.5.2 - html-encoding-sniffer@6.0.0(@noble/hashes@2.2.0): + html-encoding-sniffer@6.0.0(@noble/hashes@2.3.0): dependencies: - '@exodus/bytes': 1.15.1(@noble/hashes@2.2.0) + '@exodus/bytes': 1.15.1(@noble/hashes@2.3.0) transitivePeerDependencies: - '@noble/hashes' @@ -13715,13 +14142,11 @@ snapshots: inline-style-parser@0.2.7: {} - int64-buffer@1.1.1: {} - - ip-address@10.3.1: {} + ip-address@10.5.0: {} ipaddr.js@1.9.1: {} - ipaddr.js@2.4.0: {} + ipaddr.js@2.5.0: {} ircv3@0.33.1: dependencies: @@ -13817,7 +14242,7 @@ snapshots: jose@4.15.9: {} - jose@6.2.4: {} + jose@6.2.9: {} js-tokens@10.0.0: {} @@ -13827,55 +14252,55 @@ snapshots: dependencies: argparse: 2.0.1 - jscpd-darwin-arm64@5.0.12: + jscpd-darwin-arm64@5.0.15: optional: true - jscpd-darwin-x64@5.0.12: + jscpd-darwin-x64@5.0.15: optional: true - jscpd-linux-arm64-gnu@5.0.12: + jscpd-linux-arm64-gnu@5.0.15: optional: true - jscpd-linux-x64-gnu@5.0.12: + jscpd-linux-x64-gnu@5.0.15: optional: true - jscpd-linux-x64-musl@5.0.12: + jscpd-linux-x64-musl@5.0.15: optional: true - jscpd-windows-x64-msvc@5.0.12: + jscpd-windows-x64-msvc@5.0.15: optional: true - jscpd@5.0.12: + jscpd@5.0.15: optionalDependencies: - jscpd-darwin-arm64: 5.0.12 - jscpd-darwin-x64: 5.0.12 - jscpd-linux-arm64-gnu: 5.0.12 - jscpd-linux-x64-gnu: 5.0.12 - jscpd-linux-x64-musl: 5.0.12 - jscpd-windows-x64-msvc: 5.0.12 + jscpd-darwin-arm64: 5.0.15 + jscpd-darwin-x64: 5.0.15 + jscpd-linux-arm64-gnu: 5.0.15 + jscpd-linux-x64-gnu: 5.0.15 + jscpd-linux-x64-musl: 5.0.15 + jscpd-windows-x64-msvc: 5.0.15 - jsdom@29.1.1(@noble/hashes@2.2.0): + jsdom@29.1.1(@noble/hashes@2.3.0): dependencies: '@asamuzakjp/css-color': 5.1.11 '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 '@csstools/css-syntax-patches-for-csstree': 1.1.7(css-tree@3.2.1) - '@exodus/bytes': 1.15.1(@noble/hashes@2.2.0) + '@exodus/bytes': 1.15.1(@noble/hashes@2.3.0) css-tree: 3.2.1 - data-urls: 7.0.0(@noble/hashes@2.2.0) + data-urls: 7.0.0(@noble/hashes@2.3.0) decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0(@noble/hashes@2.2.0) + html-encoding-sniffer: 6.0.0(@noble/hashes@2.3.0) is-potential-custom-element-name: 1.0.1 lru-cache: 11.5.2 parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.1.2 + tough-cookie: 6.0.2 undici: 7.29.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1(@noble/hashes@2.2.0) + whatwg-url: 16.0.1(@noble/hashes@2.3.0) xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' @@ -13972,18 +14397,18 @@ snapshots: '@koromix/koffi-win32-ia32': 3.1.5 '@koromix/koffi-win32-x64': 3.1.5 - kysely@0.29.4: {} + kysely@0.29.5: {} leven@3.1.0: {} libopus-wasm@0.2.0: {} - libphonenumber-js@1.13.9: {} + libphonenumber-js@1.13.11: {} libsignal@6.0.0: dependencies: curve25519-js: 0.0.4 - protobufjs: 8.7.1 + protobufjs: 8.7.2 lie@3.3.0: dependencies: @@ -14052,9 +14477,9 @@ snapshots: htmlparser2: 10.1.0 uhyphen: 0.2.0 - linkify-it@5.0.2: + linkify-it@6.1.0: dependencies: - uc.micro: 2.1.0 + uc.micro: 3.0.0 lit-analyzer@2.0.3: dependencies: @@ -14118,8 +14543,6 @@ snapshots: lodash.truncate@4.4.2: {} - lodash@4.18.1: {} - loglevel@1.9.2: {} long@5.3.2: {} @@ -14173,23 +14596,23 @@ snapshots: markdown-extensions@2.0.0: {} - markdown-it-cjk-friendly@2.0.2(@types/markdown-it@14.1.2)(markdown-it@14.3.0): + markdown-it-cjk-friendly@2.0.3(@types/markdown-it@14.1.2)(markdown-it@15.0.0): dependencies: get-east-asian-width: 1.6.0 - markdown-it: 14.3.0 + markdown-it: 15.0.0 optionalDependencies: '@types/markdown-it': 14.1.2 markdown-it-task-lists@2.1.1: {} - markdown-it@14.3.0: + markdown-it@15.0.0: dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.2 + argparse: 3.0.0 + entities: 8.0.0 + linkify-it: 6.1.0 mdurl: 2.1.0 punycode.js: 2.3.1 - uc.micro: 2.1.0 + uc.micro: 3.0.0 markdown-table@3.0.4: {} @@ -14197,7 +14620,7 @@ snapshots: marked@18.0.5: {} - marked@18.0.7: {} + marked@18.0.9: {} math-intrinsics@1.1.0: {} @@ -14208,7 +14631,7 @@ snapshots: matrix-js-sdk@41.9.0: dependencies: '@babel/runtime': 8.0.0 - '@matrix-org/matrix-sdk-crypto-wasm': 18.4.0 + '@matrix-org/matrix-sdk-crypto-wasm': 18.5.0 another-json: 0.2.0 bs58: 6.0.0 content-type: 2.0.0 @@ -14430,8 +14853,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -14594,7 +15017,7 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.5: + minimatch@10.2.6: dependencies: brace-expansion: 5.0.9 @@ -14636,8 +15059,6 @@ snapshots: module-details-from-path@1.0.4: {} - mp4box@0.5.4: {} - mpg123-decoder@1.0.3: dependencies: '@wasm-audio-decoders/common': 9.0.7 @@ -14657,7 +15078,7 @@ snapshots: '@tokenizer/token': 0.3.0 content-type: 2.0.0 debug: 4.4.3(supports-color@10.2.2) - file-type: 22.0.1(supports-color@10.2.2) + file-type: 22.0.2(supports-color@10.2.2) media-typer: 2.0.0 strtok3: 10.3.5 token-types: 6.1.2 @@ -14672,8 +15093,6 @@ snapshots: negotiator@1.0.0: {} - neoip@3.1.0: {} - node-addon-api@7.1.1: {} node-addon-api@8.9.0: {} @@ -14683,7 +15102,7 @@ snapshots: node-edge-tts@1.2.10(supports-color@10.2.2): dependencies: https-proxy-agent: 7.0.6(supports-color@10.2.2) - ws: 8.21.1 + ws: 8.21.3 yargs: 17.7.3 transitivePeerDependencies: - bufferutil @@ -14710,7 +15129,7 @@ snapshots: normalize-path@3.0.0: {} - nostr-tools@2.24.1(typescript@7.0.2): + nostr-tools@2.24.2(typescript@6.0.3): dependencies: '@noble/ciphers': 2.1.1 '@noble/curves': 2.0.1 @@ -14720,7 +15139,7 @@ snapshots: '@scure/bip39': 2.0.1 nostr-wasm: 0.1.0 optionalDependencies: - typescript: 7.0.2 + typescript: 6.0.3 nostr-wasm@0.1.0: {} @@ -14787,7 +15206,7 @@ snapshots: long: 5.3.2 onnxruntime-common: 1.20.0-dev.20241016-2b8fc5529b platform: 1.3.6 - protobufjs: 8.7.1 + protobufjs: 8.7.2 optional: true open@10.2.0: @@ -14821,12 +15240,12 @@ snapshots: - encoding optional: true - openai@6.49.0(@aws-sdk/credential-provider-node@3.972.72)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.6.10)(ws@8.21.1)(zod@4.4.3): + openai@7.4.0(@aws-sdk/credential-provider-node@3.972.80)(@smithy/hash-node@4.4.14)(@smithy/signature-v4@5.7.3)(ws@8.21.3)(zod@4.4.3): optionalDependencies: - '@aws-sdk/credential-provider-node': 3.972.72 + '@aws-sdk/credential-provider-node': 3.972.80 '@smithy/hash-node': 4.4.14 - '@smithy/signature-v4': 5.6.10 - ws: 8.21.1 + '@smithy/signature-v4': 5.7.3 + ws: 8.21.3 zod: 4.4.3 opus-decoder@0.7.11: @@ -14866,31 +15285,29 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 7.0.2001 '@oxlint-tsgolint/win32-x64': 7.0.2001 - oxlint@1.75.0(oxlint-tsgolint@7.0.2001): + oxlint@1.78.0(oxlint-tsgolint@7.0.2001): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.75.0 - '@oxlint/binding-android-arm64': 1.75.0 - '@oxlint/binding-darwin-arm64': 1.75.0 - '@oxlint/binding-darwin-x64': 1.75.0 - '@oxlint/binding-freebsd-x64': 1.75.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.75.0 - '@oxlint/binding-linux-arm-musleabihf': 1.75.0 - '@oxlint/binding-linux-arm64-gnu': 1.75.0 - '@oxlint/binding-linux-arm64-musl': 1.75.0 - '@oxlint/binding-linux-ppc64-gnu': 1.75.0 - '@oxlint/binding-linux-riscv64-gnu': 1.75.0 - '@oxlint/binding-linux-riscv64-musl': 1.75.0 - '@oxlint/binding-linux-s390x-gnu': 1.75.0 - '@oxlint/binding-linux-x64-gnu': 1.75.0 - '@oxlint/binding-linux-x64-musl': 1.75.0 - '@oxlint/binding-openharmony-arm64': 1.75.0 - '@oxlint/binding-win32-arm64-msvc': 1.75.0 - '@oxlint/binding-win32-ia32-msvc': 1.75.0 - '@oxlint/binding-win32-x64-msvc': 1.75.0 + '@oxlint/binding-android-arm-eabi': 1.78.0 + '@oxlint/binding-android-arm64': 1.78.0 + '@oxlint/binding-darwin-arm64': 1.78.0 + '@oxlint/binding-darwin-x64': 1.78.0 + '@oxlint/binding-freebsd-x64': 1.78.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.78.0 + '@oxlint/binding-linux-arm-musleabihf': 1.78.0 + '@oxlint/binding-linux-arm64-gnu': 1.78.0 + '@oxlint/binding-linux-arm64-musl': 1.78.0 + '@oxlint/binding-linux-ppc64-gnu': 1.78.0 + '@oxlint/binding-linux-riscv64-gnu': 1.78.0 + '@oxlint/binding-linux-riscv64-musl': 1.78.0 + '@oxlint/binding-linux-s390x-gnu': 1.78.0 + '@oxlint/binding-linux-x64-gnu': 1.78.0 + '@oxlint/binding-linux-x64-musl': 1.78.0 + '@oxlint/binding-openharmony-arm64': 1.78.0 + '@oxlint/binding-win32-arm64-msvc': 1.78.0 + '@oxlint/binding-win32-ia32-msvc': 1.78.0 + '@oxlint/binding-win32-x64-msvc': 1.78.0 oxlint-tsgolint: 7.0.2001 - p-cancelable@2.1.1: {} - p-finally@1.0.0: {} p-limit@2.3.0: @@ -15035,27 +15452,27 @@ snapshots: pngjs@7.0.0: {} - postcss-lit@1.4.1(jiti@2.7.0)(postcss@8.5.23)(supports-color@10.2.2)(tsx@4.23.1)(yaml@2.9.0): + postcss-lit@1.4.1(jiti@2.7.0)(postcss@8.5.26)(supports-color@10.2.2)(tsx@4.23.12)(yaml@2.9.0): dependencies: '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 '@babel/traverse': 7.29.7(supports-color@10.2.2) lilconfig: 3.1.3 - postcss: 8.5.23 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.23)(tsx@4.23.1)(yaml@2.9.0) + postcss: 8.5.26 + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.26)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - jiti - supports-color - tsx - yaml - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.23)(tsx@4.23.1)(yaml@2.9.0): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.26)(tsx@4.23.12)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.7.0 - postcss: 8.5.23 - tsx: 4.23.1 + postcss: 8.5.26 + tsx: 4.23.12 yaml: 2.9.0 postcss-safe-parser@7.0.1(postcss@8.5.23): @@ -15075,6 +15492,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.26: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + powershell-utils@0.1.0: {} pretty-ms@9.3.0: @@ -15097,7 +15520,7 @@ snapshots: property-information@7.2.0: {} - protobufjs@8.7.1: + protobufjs@8.7.2: dependencies: long: 5.3.2 @@ -15145,11 +15568,11 @@ snapshots: quick-format-unescaped@4.0.4: {} - quickjs-wasi@3.2.0: {} + quickjs-wasi@3.4.0: {} range-parser@1.3.0: {} - rastermill@0.3.1: + rastermill@0.3.2: dependencies: '@silvia-odwyer/photon-node': 0.3.4 @@ -15189,10 +15612,10 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.17.0): + recma-jsx@1.0.1(acorn@8.18.0): dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -15281,44 +15704,21 @@ snapshots: reusify@1.1.0: {} - rolldown-plugin-dts@0.25.2(@typescript/native-preview@7.0.0-dev.20260707.2)(rolldown@1.2.0)(typescript@6.0.3): + rolldown-plugin-dts@0.27.14(@typescript/native-preview@7.0.0-dev.20260707.2)(rolldown@1.2.0)(typescript@6.0.3): dependencies: - '@babel/generator': 8.0.0-rc.6 - '@babel/helper-validator-identifier': 8.0.0-rc.6 - '@babel/parser': 8.0.0-rc.6 - ast-kit: 3.0.0 - birpc: 4.0.0 dts-resolver: 3.0.0 get-tsconfig: 5.0.0-beta.5 obug: 2.1.4 rolldown: 1.2.0 + yuku-ast: 0.8.7 + yuku-codegen: 0.8.7 + yuku-parser: 0.8.7 optionalDependencies: '@typescript/native-preview': 7.0.0-dev.20260707.2 typescript: 6.0.3 transitivePeerDependencies: - oxc-resolver - rolldown@1.1.5: - dependencies: - '@oxc-project/types': 0.139.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.5 - '@rolldown/binding-darwin-arm64': 1.1.5 - '@rolldown/binding-darwin-x64': 1.1.5 - '@rolldown/binding-freebsd-x64': 1.1.5 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 - '@rolldown/binding-linux-arm64-gnu': 1.1.5 - '@rolldown/binding-linux-arm64-musl': 1.1.5 - '@rolldown/binding-linux-ppc64-gnu': 1.1.5 - '@rolldown/binding-linux-s390x-gnu': 1.1.5 - '@rolldown/binding-linux-x64-gnu': 1.1.5 - '@rolldown/binding-linux-x64-musl': 1.1.5 - '@rolldown/binding-openharmony-arm64': 1.1.5 - '@rolldown/binding-wasm32-wasi': 1.1.5 - '@rolldown/binding-win32-arm64-msvc': 1.1.5 - '@rolldown/binding-win32-x64-msvc': 1.1.5 - rolldown@1.2.0: dependencies: '@oxc-project/types': 0.140.0 @@ -15340,6 +15740,27 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.0 '@rolldown/binding-win32-x64-msvc': 1.2.0 + rolldown@1.2.5: + dependencies: + '@oxc-project/types': 0.146.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.5 + '@rolldown/binding-android-arm64': 1.2.5 + '@rolldown/binding-darwin-arm64': 1.2.5 + '@rolldown/binding-darwin-x64': 1.2.5 + '@rolldown/binding-freebsd-x64': 1.2.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.5 + '@rolldown/binding-linux-arm64-gnu': 1.2.5 + '@rolldown/binding-linux-arm64-musl': 1.2.5 + '@rolldown/binding-linux-ppc64-gnu': 1.2.5 + '@rolldown/binding-linux-s390x-gnu': 1.2.5 + '@rolldown/binding-linux-x64-gnu': 1.2.5 + '@rolldown/binding-linux-x64-musl': 1.2.5 + '@rolldown/binding-openharmony-arm64': 1.2.5 + '@rolldown/binding-win32-arm64-msvc': 1.2.5 + '@rolldown/binding-win32-x64-msvc': 1.2.5 + router@2.2.0(supports-color@10.2.2): dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -15356,8 +15777,6 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rx.mini@1.4.0: {} - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -15407,7 +15826,7 @@ snapshots: setprototypeof@1.2.0: {} - sharp@0.35.3(@types/node@26.1.2): + sharp@0.35.3(@types/node@26.2.0): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 @@ -15438,7 +15857,7 @@ snapshots: '@img/sharp-win32-arm64': 0.35.3 '@img/sharp-win32-ia32': 0.35.3 '@img/sharp-win32-x64': 0.35.3 - '@types/node': 26.1.2 + '@types/node': 26.2.0 optional: true shebang-command@2.0.0: @@ -15458,6 +15877,17 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.5 + shiki@4.4.3: + dependencies: + '@shikijs/core': 4.4.3 + '@shikijs/engine-javascript': 4.4.3 + '@shikijs/engine-oniguruma': 4.4.3 + '@shikijs/langs': 4.4.3 + '@shikijs/themes': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -15539,7 +15969,7 @@ snapshots: smart-buffer@4.2.0: {} - smol-toml@1.7.1: {} + smol-toml@1.8.0: {} socks-proxy-agent@10.1.0(supports-color@10.2.2): dependencies: @@ -15551,7 +15981,7 @@ snapshots: socks@2.8.9: dependencies: - ip-address: 10.3.1 + ip-address: 10.5.0 smart-buffer: 4.2.0 sonic-boom@4.2.1: @@ -15799,10 +16229,16 @@ snapshots: tldts-core@6.1.86: {} + tldts-core@7.4.10: {} + tldts@6.1.86: dependencies: tldts-core: 6.1.86 + tldts@7.4.10: + dependencies: + tldts-core: 7.4.10 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -15823,6 +16259,10 @@ snapshots: dependencies: tldts: 6.1.86 + tough-cookie@6.0.2: + dependencies: + tldts: 7.4.10 + tr46@0.0.3: {} tr46@6.0.0: @@ -15844,7 +16284,7 @@ snapshots: ts-simple-type@2.0.0-next.0: {} - tsdown@0.22.1(@typescript/native-preview@7.0.0-dev.20260707.2)(tsx@4.23.1)(typescript@6.0.3)(unrun@0.3.1): + tsdown@0.22.14(@typescript/native-preview@7.0.0-dev.20260707.2)(tsx@4.23.12)(typescript@6.0.3)(unrun@0.3.1): dependencies: ansis: 4.3.1 cac: 7.0.0 @@ -15855,19 +16295,19 @@ snapshots: obug: 2.1.4 picomatch: 4.0.5 rolldown: 1.2.0 - rolldown-plugin-dts: 0.25.2(@typescript/native-preview@7.0.0-dev.20260707.2)(rolldown@1.2.0)(typescript@6.0.3) - semver: 7.8.5 + rolldown-plugin-dts: 0.27.14(@typescript/native-preview@7.0.0-dev.20260707.2)(rolldown@1.2.0)(typescript@6.0.3) tinyexec: 1.2.4 tinyglobby: 0.2.17 tree-kill: 1.2.2 unconfig-core: 7.5.0 + verkit: 0.3.2 optionalDependencies: - tsx: 4.23.1 + tsx: 4.23.12 typescript: 6.0.3 unrun: 0.3.1 transitivePeerDependencies: - - '@ts-macro/tsc' - '@typescript/native-preview' + - '@volar/typescript' - oxc-resolver - vue-tsc @@ -15879,7 +16319,7 @@ snapshots: tsscmp@1.0.6: {} - tsx@4.23.1: + tsx@4.23.12: dependencies: esbuild: 0.28.1 optionalDependencies: @@ -15905,41 +16345,17 @@ snapshots: media-typer: 1.1.1 mime-types: 3.0.2 - typebox@1.3.6: {} + typebox@1.3.14: {} typescript@5.2.2: {} typescript@6.0.3: {} - typescript@7.0.2: - optionalDependencies: - '@typescript/typescript-aix-ppc64': 7.0.2 - '@typescript/typescript-darwin-arm64': 7.0.2 - '@typescript/typescript-darwin-x64': 7.0.2 - '@typescript/typescript-freebsd-arm64': 7.0.2 - '@typescript/typescript-freebsd-x64': 7.0.2 - '@typescript/typescript-linux-arm': 7.0.2 - '@typescript/typescript-linux-arm64': 7.0.2 - '@typescript/typescript-linux-loong64': 7.0.2 - '@typescript/typescript-linux-mips64el': 7.0.2 - '@typescript/typescript-linux-ppc64': 7.0.2 - '@typescript/typescript-linux-riscv64': 7.0.2 - '@typescript/typescript-linux-s390x': 7.0.2 - '@typescript/typescript-linux-x64': 7.0.2 - '@typescript/typescript-netbsd-arm64': 7.0.2 - '@typescript/typescript-netbsd-x64': 7.0.2 - '@typescript/typescript-openbsd-arm64': 7.0.2 - '@typescript/typescript-openbsd-x64': 7.0.2 - '@typescript/typescript-sunos-x64': 7.0.2 - '@typescript/typescript-win32-arm64': 7.0.2 - '@typescript/typescript-win32-x64': 7.0.2 - optional: true - typical@4.0.0: {} typical@7.3.0: {} - uc.micro@2.1.0: {} + uc.micro@3.0.0: {} uhyphen@0.2.0: {} @@ -15961,7 +16377,7 @@ snapshots: undici@7.29.0: {} - undici@8.9.0: {} + undici@8.10.0: {} unhomoglyph@1.0.6: {} @@ -16018,6 +16434,8 @@ snapshots: vary@1.1.2: {} + verkit@0.3.2: {} + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 @@ -16028,40 +16446,25 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0): + vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.23 - rolldown: 1.1.5 + postcss: 8.5.26 + rolldown: 1.2.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.13.3 - esbuild: 0.28.1 + '@types/node': 26.2.0 + esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.7.0 - tsx: 4.23.1 + tsx: 4.23.12 yaml: 2.9.0 - vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0): - dependencies: - lightningcss: 1.33.0 - picomatch: 4.0.5 - postcss: 8.5.23 - rolldown: 1.1.5 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 26.1.2 - esbuild: 0.28.1 - fsevents: 2.3.3 - jiti: 2.7.0 - tsx: 4.23.1 - yaml: 2.9.0 - - vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)): + vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -16078,45 +16481,14 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 24.13.3 - '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) + '@types/node': 26.2.0 + '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))(vitest@4.1.10) '@vitest/coverage-v8': 4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10) - jsdom: 29.1.1(@noble/hashes@2.2.0) - transitivePeerDependencies: - - msw - - vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.10 - '@vitest/runner': 4.1.10 - '@vitest/snapshot': 4.1.10 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 - es-module-lexer: 2.3.1 - expect-type: 1.4.0 - magic-string: 0.30.21 - obug: 2.1.4 - pathe: 2.0.3 - picomatch: 4.0.5 - std-env: 4.2.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 - vite: 8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 26.1.2 - '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10) - '@vitest/coverage-v8': 4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10) - jsdom: 29.1.1(@noble/hashes@2.2.0) + jsdom: 29.1.1(@noble/hashes@2.3.0) transitivePeerDependencies: - msw @@ -16174,57 +16546,13 @@ snapshots: web-streams-polyfill@4.0.0-beta.3: optional: true - web-tree-sitter@0.26.11: {} + web-tree-sitter@0.26.12: {} webidl-conversions@3.0.1: {} webidl-conversions@8.0.1: {} - werift-common@0.0.3(supports-color@10.2.2): - dependencies: - '@shinyoshiaki/jspack': 0.0.6 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - - werift-dtls@0.5.7: - dependencies: - '@fidm/x509': 1.2.1 - '@noble/curves': 1.9.7 - '@peculiar/x509': 1.14.3 - '@shinyoshiaki/binary-data': 0.6.1 - date-fns: 2.30.0 - lodash: 4.18.1 - rx.mini: 1.4.0 - tweetnacl: 1.0.3 - - werift-ice@0.2.2(supports-color@10.2.2): - dependencies: - '@shinyoshiaki/jspack': 0.0.6 - buffer-crc32: 1.0.0 - debug: 4.4.3(supports-color@10.2.2) - int64-buffer: 1.1.1 - ip: neoip@3.1.0 - lodash: 4.18.1 - multicast-dns: 7.2.5 - p-cancelable: 2.1.1 - rx.mini: 1.4.0 - transitivePeerDependencies: - - supports-color - - werift-rtp@0.8.8: - dependencies: - '@minhducsun2002/leb128': 1.0.0 - '@shinyoshiaki/jspack': 0.0.6 - aes-js: 3.1.2 - buffer: 6.0.3 - mp4box: 0.5.4 - - werift-sctp@0.0.11: - dependencies: - '@shinyoshiaki/jspack': 0.0.6 - - werift@0.24.1(supports-color@10.2.2): + werift@0.24.4(supports-color@10.2.2): dependencies: '@fidm/x509': 1.2.1 '@noble/curves': 1.9.7 @@ -16235,11 +16563,6 @@ snapshots: mediabunny: 1.51.0 multicast-dns: 7.2.5 tweetnacl: 1.0.3 - werift-common: 0.0.3(supports-color@10.2.2) - werift-dtls: 0.5.7 - werift-ice: 0.2.2(supports-color@10.2.2) - werift-rtp: 0.8.8 - werift-sctp: 0.0.11 transitivePeerDependencies: - supports-color @@ -16247,9 +16570,9 @@ snapshots: whatwg-mimetype@5.0.0: {} - whatwg-url@16.0.1(@noble/hashes@2.2.0): + whatwg-url@16.0.1(@noble/hashes@2.3.0): dependencies: - '@exodus/bytes': 1.15.1(@noble/hashes@2.2.0) + '@exodus/bytes': 1.15.1(@noble/hashes@2.3.0) tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -16301,6 +16624,8 @@ snapshots: ws@8.21.1: {} + ws@8.21.3: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 @@ -16359,6 +16684,45 @@ snapshots: yoctocolors@2.2.0: {} + yuku-ast@0.8.7: + dependencies: + '@yuku-toolchain/types': 0.8.7 + + yuku-codegen@0.8.7: + dependencies: + '@yuku-toolchain/types': 0.8.7 + optionalDependencies: + '@yuku-codegen/binding-android-arm64': 0.8.7 + '@yuku-codegen/binding-darwin-arm64': 0.8.7 + '@yuku-codegen/binding-darwin-x64': 0.8.7 + '@yuku-codegen/binding-freebsd-x64': 0.8.7 + '@yuku-codegen/binding-linux-arm-gnu': 0.8.7 + '@yuku-codegen/binding-linux-arm-musl': 0.8.7 + '@yuku-codegen/binding-linux-arm64-gnu': 0.8.7 + '@yuku-codegen/binding-linux-arm64-musl': 0.8.7 + '@yuku-codegen/binding-linux-x64-gnu': 0.8.7 + '@yuku-codegen/binding-linux-x64-musl': 0.8.7 + '@yuku-codegen/binding-win32-arm64': 0.8.7 + '@yuku-codegen/binding-win32-x64': 0.8.7 + + yuku-parser@0.8.7: + dependencies: + '@yuku-toolchain/types': 0.8.7 + yuku-ast: 0.8.7 + optionalDependencies: + '@yuku-parser/binding-android-arm64': 0.8.7 + '@yuku-parser/binding-darwin-arm64': 0.8.7 + '@yuku-parser/binding-darwin-x64': 0.8.7 + '@yuku-parser/binding-freebsd-x64': 0.8.7 + '@yuku-parser/binding-linux-arm-gnu': 0.8.7 + '@yuku-parser/binding-linux-arm-musl': 0.8.7 + '@yuku-parser/binding-linux-arm64-gnu': 0.8.7 + '@yuku-parser/binding-linux-arm64-musl': 0.8.7 + '@yuku-parser/binding-linux-x64-gnu': 0.8.7 + '@yuku-parser/binding-linux-x64-musl': 0.8.7 + '@yuku-parser/binding-win32-arm64': 0.8.7 + '@yuku-parser/binding-win32-x64': 0.8.7 + zca-js@2.1.2: dependencies: crypto-js: 4.2.0 @@ -16368,7 +16732,7 @@ snapshots: semver: 7.8.5 spark-md5: 3.0.2 tough-cookie: 5.1.2 - ws: 8.21.1 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - utf-8-validate diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5ffb3a0e5927..595f1a7fc9ec 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -63,13 +63,13 @@ minimumReleaseAgeExclude: - "@microsoft/teams.common@2.0.12" - "@microsoft/teams.graph@2.0.12" - "@modelcontextprotocol/sdk@1.30.0" - - "@trycua/cua-driver@0.19.3" - - "@trycua/cua-driver-darwin-arm64@0.19.3" - - "@trycua/cua-driver-darwin-x64@0.19.3" - - "@trycua/cua-driver-linux-arm64-gnu@0.19.3" - - "@trycua/cua-driver-linux-x64-gnu@0.19.3" - - "@trycua/cua-driver-win32-arm64-msvc@0.19.3" - - "@trycua/cua-driver-win32-x64-msvc@0.19.3" + - "@trycua/cua-driver@0.20.0" + - "@trycua/cua-driver-darwin-arm64@0.20.0" + - "@trycua/cua-driver-darwin-x64@0.20.0" + - "@trycua/cua-driver-linux-arm64-gnu@0.20.0" + - "@trycua/cua-driver-linux-x64-gnu@0.20.0" + - "@trycua/cua-driver-win32-arm64-msvc@0.20.0" + - "@trycua/cua-driver-win32-x64-msvc@0.20.0" - "@openai/codex" - "@openai/codex-*" - "@pierre/diffs@1.2.3" @@ -127,38 +127,39 @@ verifyDepsBeforeRun: false blockExoticSubdeps: true overrides: - "@agentclientprotocol/codex-acp@1.1.7>@openai/codex": 0.148.0 - "@anthropic-ai/sdk": 0.115.0 + "@agentclientprotocol/codex-acp@1.4.0>@openai/codex": 0.148.0 + "@codemirror/commands@6.11.0>@codemirror/view": 6.43.9 + "@anthropic-ai/sdk": 0.117.1 "@opentelemetry/core": 2.10.0 "@opentelemetry/propagator-jaeger": 2.10.0 - "@aws-sdk/core": 3.977.1 - "@aws-sdk/credential-provider-node": 3.972.72 - "@aws-sdk/xml-builder": 3.972.37 - "@hono/node-server": 2.0.12 - axios: 1.18.1 + "@aws-sdk/core": 3.977.8 + "@aws-sdk/credential-provider-node": 3.972.80 + "@aws-sdk/xml-builder": 3.972.39 + "@hono/node-server": 2.1.1 + axios: 1.19.0 fast-uri: 4.1.2 - "undici@7": 7.29.0 follow-redirects: 1.16.0 defu: 6.1.7 - fast-xml-parser: 5.10.1 + fast-xml-parser: 5.11.0 request: "npm:@cypress/request@4.0.1" request-promise: "npm:@cypress/request-promise@5.0.0" - basic-ftp: 6.0.2 + basic-ftp: 6.2.0 brace-expansion: 5.0.9 - file-type: 22.0.1 + file-type: 22.0.2 form-data: 4.0.6 "werift-ice@0.2.2>ip": "npm:neoip@3.1.0" - ip-address: 10.3.1 - minimatch: 10.2.5 + ip-address: 10.5.0 + minimatch: 10.2.6 path-to-regexp: 8.4.2 qs: 6.15.3 sharp: 0.35.3 node-domexception: "npm:@nolyfill/domexception@1.0.28" - typebox: 1.3.6 + typebox: 1.3.14 tar: 7.5.22 - tough-cookie: 5.1.2 + tough-cookie: 6.0.2 + "zca-js@2.1.2>tough-cookie": 5.1.2 yauzl: 3.4.0 - protobufjs: 8.7.1 + protobufjs: 8.7.2 uuid: 14.0.1 allowBuilds: diff --git a/qa/convex-credential-broker/package.json b/qa/convex-credential-broker/package.json index 3a82bdd43a1c..5a2c5fd1367c 100644 --- a/qa/convex-credential-broker/package.json +++ b/qa/convex-credential-broker/package.json @@ -10,7 +10,7 @@ "dev": "convex dev" }, "dependencies": { - "convex": "1.42.3", - "nostr-tools": "2.24.1" + "convex": "1.44.0", + "nostr-tools": "2.24.2" } } diff --git a/scripts/check-workflows.mts b/scripts/check-workflows.mts index 6d125772f82a..3ad4fd244d58 100644 --- a/scripts/check-workflows.mts +++ b/scripts/check-workflows.mts @@ -8,7 +8,7 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; const ACTIONLINT_VERSION = "1.7.12"; -const PRE_COMMIT_VERSION = "4.2.0"; +const PRE_COMMIT_VERSION = "4.6.2"; const WORKFLOW_DIR = ".github/workflows"; function commandExists(command: string, args: readonly string[] = ["--version"]): boolean { diff --git a/scripts/cloudflare/package.json b/scripts/cloudflare/package.json index 26562cadb7c3..59e859d58949 100644 --- a/scripts/cloudflare/package.json +++ b/scripts/cloudflare/package.json @@ -11,6 +11,6 @@ }, "devDependencies": { "typescript": "6.0.3", - "wrangler": "4.122.0" + "wrangler": "4.123.0" } } diff --git a/scripts/crabbox-untrusted-bootstrap.sh b/scripts/crabbox-untrusted-bootstrap.sh index bc235d63eb78..bc340adef0de 100755 --- a/scripts/crabbox-untrusted-bootstrap.sh +++ b/scripts/crabbox-untrusted-bootstrap.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -euo pipefail -node_version="24.15.0" -pnpm_spec="pnpm@11.15.1+sha512.81350b07e53c9538a02f1f2303b4290fa2d7be04e56e2a970c4cc4b417dc761de196edabd49d55c7dc9580db81007c44143e4e3d7e462b3000d23c255122d065" +node_version="24.19.0" +pnpm_spec="pnpm@11.22.0+sha512.1ff870c4c6133dfd88fb2afc46dd13d47f09c9794b438c6fdb47ca98caf3bc16381ee0be93a091b8e3824cf01f889f46d7d9e20910fb0be1ab0fb5baa80dd621" if [[ $# -lt 2 ]]; then echo "usage: $0 [args...]" >&2 diff --git a/scripts/crabbox-wrapper.mts b/scripts/crabbox-wrapper.mts index 75ea3699284e..46c62f0faba9 100755 --- a/scripts/crabbox-wrapper.mts +++ b/scripts/crabbox-wrapper.mts @@ -2746,7 +2746,7 @@ function remotePosixJsEnvBootstrap() { } function remoteAwsMacosJsBootstrap({ packageManager = false, bun = false } = {}) { - const nodeVersion = process.env.OPENCLAW_CRABBOX_MACOS_NODE_VERSION?.trim() || "24.15.0"; + const nodeVersion = process.env.OPENCLAW_CRABBOX_MACOS_NODE_VERSION?.trim() || "24.19.0"; const bootstrap = [ "openclaw_crabbox_bootstrap_macos_js() {", 'tool_root="${OPENCLAW_CRABBOX_MACOS_TOOLCHAIN_DIR:-$HOME/.openclaw-crabbox-toolchain}";', @@ -2850,7 +2850,7 @@ function remoteAwsMacosJsBootstrap({ packageManager = false, bun = false } = {}) } function remoteWsl2JsBootstrap({ packageManager = false } = {}) { - const nodeVersion = process.env.OPENCLAW_CRABBOX_WSL2_NODE_VERSION?.trim() || "24.15.0"; + const nodeVersion = process.env.OPENCLAW_CRABBOX_WSL2_NODE_VERSION?.trim() || "24.19.0"; const bootstrap = [ "openclaw_crabbox_bootstrap_wsl2_js() {", 'tool_root="${OPENCLAW_CRABBOX_WSL2_TOOLCHAIN_DIR:-$HOME/.openclaw-crabbox-toolchain}";', @@ -3263,26 +3263,28 @@ function injectRemoteAwsMacosJsBootstrap(run: RunInvocation, facts: RunFacts, pr function remoteAwsMacosSwiftBootstrap() { return [ - "openclaw_crabbox_require_macos_swift_62() {", + "openclaw_crabbox_require_macos_swift_63() {", 'openclaw_xcode="";', - 'for openclaw_candidate in /Applications/Xcode_26.1.app /Applications/Xcode_26*.app /Applications/Xcode-26*.app; do if [ -d "$openclaw_candidate" ]; then openclaw_xcode="$openclaw_candidate"; fi; done;', + 'for openclaw_candidate in /Applications/Xcode_26*.app /Applications/Xcode-26*.app /Applications/Xcode_2[7-9]*.app /Applications/Xcode-2[7-9]*.app; do if [ -d "$openclaw_candidate" ]; then openclaw_xcode="$openclaw_candidate"; fi; done;', 'if [ -n "$openclaw_xcode" ]; then openclaw_developer="$openclaw_xcode/Contents/Developer"; if [ ! -d "$openclaw_developer" ]; then openclaw_developer="$openclaw_xcode"; fi; sudo xcode-select -s "$openclaw_developer" || return 1; fi;', 'openclaw_swift_version="$(swift --version 2>&1)" || { status=$?; printf "%s\\n" "$openclaw_swift_version" >&2; return "$status"; };', 'printf "%s\\n" "$openclaw_swift_version" >&2;', 'openclaw_swift_major_minor="$(printf "%s\\n" "$openclaw_swift_version" | sed -nE "s/.*Apple Swift version ([0-9]+)\\.([0-9]+).*/\\1 \\2/p" | head -n 1)";', - 'if [ -z "$openclaw_swift_major_minor" ]; then echo "[crabbox] OpenClaw macOS app proof requires Swift tools 6.2+; unable to parse swift --version." >&2; return 2; fi;', + 'if [ -z "$openclaw_swift_major_minor" ]; then echo "[crabbox] OpenClaw macOS app proof requires Swift tools 6.3+; unable to parse swift --version." >&2; return 2; fi;', "set -- $openclaw_swift_major_minor;", - 'if [ "$1" -lt 6 ] || { [ "$1" -eq 6 ] && [ "$2" -lt 2 ]; }; then', - 'echo "[crabbox] OpenClaw macOS app proof requires Swift tools 6.2+ (Xcode 26.x)." >&2;', - 'echo "[crabbox] current Swift is $1.$2; select/install Xcode 26.x or use a Blacksmith macOS runner with Xcode_26.1.app." >&2;', + 'if [ "$1" -lt 6 ] || { [ "$1" -eq 6 ] && [ "$2" -lt 3 ]; }; then', + 'echo "[crabbox] OpenClaw macOS app proof requires Swift tools 6.3+ (Xcode 26.4+)." >&2;', + 'echo "[crabbox] current Swift is $1.$2; select/install Xcode 26.4 or newer." >&2;', "return 2;", "fi;", - 'openclaw_xcodebuild_version="$(xcodebuild -version 2>&1)" || { printf "%s\\n" "$openclaw_xcodebuild_version" >&2; echo "[crabbox] OpenClaw macOS app proof requires Xcode 26.x; active developer directory does not provide usable xcodebuild." >&2; return 2; };', + 'openclaw_xcodebuild_version="$(xcodebuild -version 2>&1)" || { printf "%s\\n" "$openclaw_xcodebuild_version" >&2; echo "[crabbox] OpenClaw macOS app proof requires Xcode 26.4+; active developer directory does not provide usable xcodebuild." >&2; return 2; };', 'printf "%s\\n" "$openclaw_xcodebuild_version" >&2;', - 'openclaw_xcode_major="$(printf "%s\\n" "$openclaw_xcodebuild_version" | sed -nE "s/^Xcode ([0-9]+)(\\..*)?$/\\1/p" | head -n 1)";', - 'if [ "$openclaw_xcode_major" != "26" ]; then echo "[crabbox] OpenClaw macOS app proof requires Xcode 26.x; current xcodebuild is ${openclaw_xcode_major:-unknown}." >&2; return 2; fi;', + 'openclaw_xcode_major_minor="$(printf "%s\\n" "$openclaw_xcodebuild_version" | sed -nE "s/^Xcode ([0-9]+)\\.([0-9]+).*/\\1 \\2/p" | head -n 1)";', + 'if [ -z "$openclaw_xcode_major_minor" ]; then echo "[crabbox] OpenClaw macOS app proof requires Xcode 26.4+; unable to parse xcodebuild -version." >&2; return 2; fi;', + "set -- $openclaw_xcode_major_minor;", + 'if [ "$1" -lt 26 ] || { [ "$1" -eq 26 ] && [ "$2" -lt 4 ]; }; then echo "[crabbox] OpenClaw macOS app proof requires Xcode 26.4+; current xcodebuild is $1.$2." >&2; return 2; fi;', "};", - "openclaw_crabbox_require_macos_swift_62", + "openclaw_crabbox_require_macos_swift_63", ].join(" "); } diff --git a/scripts/deadcode-knip-runner.mts b/scripts/deadcode-knip-runner.mts index 091bbb3e381f..46e6e4841b82 100644 --- a/scripts/deadcode-knip-runner.mts +++ b/scripts/deadcode-knip-runner.mts @@ -1,7 +1,7 @@ import { spawn, type SpawnOptions } from "node:child_process"; import { createPnpmRunnerSpawnSpec } from "./pnpm-runner.mts"; -const KNIP_VERSION = "6.8.0"; +const KNIP_VERSION = "6.32.2"; const KNIP_TIMEOUT_MS = 10 * 60 * 1000; const KNIP_KILL_GRACE_MS = 5_000; const KNIP_PROCESS_TREE_EXIT_POLL_MS = 25; diff --git a/scripts/docker/cleanup-smoke/Dockerfile b/scripts/docker/cleanup-smoke/Dockerfile index e14d3e731359..1d1b310cea57 100644 --- a/scripts/docker/cleanup-smoke/Dockerfile +++ b/scripts/docker/cleanup-smoke/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 -FROM node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d +FROM node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03 ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 diff --git a/scripts/docker/install-sh-e2e/Dockerfile b/scripts/docker/install-sh-e2e/Dockerfile index 684be8df5713..79edd17d2082 100644 --- a/scripts/docker/install-sh-e2e/Dockerfile +++ b/scripts/docker/install-sh-e2e/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 -FROM node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d +FROM node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03 RUN --mount=type=cache,id=openclaw-install-sh-e2e-apt-cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,id=openclaw-install-sh-e2e-apt-lists,target=/var/lib/apt,sharing=locked \ diff --git a/scripts/docker/install-sh-nonroot/Dockerfile b/scripts/docker/install-sh-nonroot/Dockerfile index faa4ae805aff..a5790f3d7367 100644 --- a/scripts/docker/install-sh-nonroot/Dockerfile +++ b/scripts/docker/install-sh-nonroot/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 -FROM ubuntu:24.04@sha256:cd1dba651b3080c3686ecf4e3c4220f026b521fb76978881737d24f200828b2b +FROM ubuntu:24.04@sha256:d78ab76437b1afc5f01e223d6bf0172763f404bb166441328845adbef44518cb # Smoke images are pinned and short-lived, so skip distro upgrades here and # spend the time budget on installer coverage instead. diff --git a/scripts/docker/install-sh-smoke/Dockerfile b/scripts/docker/install-sh-smoke/Dockerfile index 16fff4518887..36afd86b32e0 100644 --- a/scripts/docker/install-sh-smoke/Dockerfile +++ b/scripts/docker/install-sh-smoke/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 -FROM node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d +FROM node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03 # Smoke images are pinned and short-lived, so skip distro upgrades here and # spend the time budget on installer coverage instead. diff --git a/scripts/docker/install-sh-smoke/run.sh b/scripts/docker/install-sh-smoke/run.sh index c5f31860b3aa..ec83d86e862f 100755 --- a/scripts/docker/install-sh-smoke/run.sh +++ b/scripts/docker/install-sh-smoke/run.sh @@ -45,7 +45,7 @@ SELF_UPDATE_WARNING_FIXED_VERSION="${OPENCLAW_INSTALL_SELF_UPDATE_WARNING_FIXED_ FRESHNESS_VERSION="${OPENCLAW_INSTALL_FRESHNESS_VERSION:-latest}" # npm min-release-age is days; 10000 keeps the control failure independent of normal release cadence. FRESHNESS_MIN_RELEASE_AGE="${OPENCLAW_INSTALL_FRESHNESS_MIN_RELEASE_AGE:-10000}" -FRESHNESS_NPM_VERSION="${OPENCLAW_INSTALL_FRESHNESS_NPM_VERSION:-11.14.1}" +FRESHNESS_NPM_VERSION="${OPENCLAW_INSTALL_FRESHNESS_NPM_VERSION:-11.19.0}" HEARTBEAT_INTERVAL="$(read_nonnegative_int_env OPENCLAW_INSTALL_SMOKE_HEARTBEAT_INTERVAL 60)" INSTALL_COMMAND_TIMEOUT="$(read_positive_int_env OPENCLAW_INSTALL_SMOKE_COMMAND_TIMEOUT 900)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" diff --git a/scripts/docker/sandbox/Dockerfile b/scripts/docker/sandbox/Dockerfile index 2c283ae2dca3..de9605b235bc 100644 --- a/scripts/docker/sandbox/Dockerfile +++ b/scripts/docker/sandbox/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:bookworm-slim@sha256:f9c6a2fd2ddbc23e336b6257a5245e31f996953ef06cd13a59fa0a1df2d5c252 +FROM debian:bookworm-slim@sha256:abd67ffcfa541b485a3dff59865ab629aa048a6c613e639d36e7456b0b229241 ENV DEBIAN_FRONTEND=noninteractive diff --git a/scripts/docker/sandbox/Dockerfile.browser b/scripts/docker/sandbox/Dockerfile.browser index b456a61225c3..604249897867 100644 --- a/scripts/docker/sandbox/Dockerfile.browser +++ b/scripts/docker/sandbox/Dockerfile.browser @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 -FROM debian:bookworm-slim@sha256:f9c6a2fd2ddbc23e336b6257a5245e31f996953ef06cd13a59fa0a1df2d5c252 +FROM debian:bookworm-slim@sha256:abd67ffcfa541b485a3dff59865ab629aa048a6c613e639d36e7456b0b229241 LABEL org.openclaw.sandbox-browser.contract="2026-05-12-cdp-relay-auth" diff --git a/scripts/docker/shared-image-artifact.sh b/scripts/docker/shared-image-artifact.sh index 09e5ca3153e7..30bd70cdcda2 100755 --- a/scripts/docker/shared-image-artifact.sh +++ b/scripts/docker/shared-image-artifact.sh @@ -205,16 +205,16 @@ require_common_inputs() { if [[ "${#image_refs[@]}" -eq 0 ]]; then fail "at least one image ref is required." fi - local image_ref - declare -A seen_refs=() + local image_ref seen_refs + seen_refs=$'\n' for image_ref in "${image_refs[@]}"; do if [[ ! "$image_ref" =~ ^[A-Za-z0-9][A-Za-z0-9._/@:-]*$ ]]; then fail "image ref contains unsupported characters: $image_ref" fi - if [[ -n "${seen_refs[$image_ref]:-}" ]]; then + if [[ "$seen_refs" == *$'\n'"$image_ref"$'\n'* ]]; then fail "duplicate image ref: $image_ref" fi - seen_refs["$image_ref"]=1 + seen_refs+="$image_ref"$'\n' done } @@ -396,17 +396,20 @@ for (const image of value.images) { } NODE - mapfile -t validated < "$validated_path" - if [[ "${#validated[@]}" -ne $((2 + ${#image_refs[@]})) ]]; then + local validated=("__openclaw_sentinel__") validated_line + while IFS= read -r validated_line; do + validated+=("$validated_line") + done < "$validated_path" + if [[ "${#validated[@]}" -ne $((3 + ${#image_refs[@]})) ]]; then fail "invalid shared Docker image artifact: validated manifest output length" fi local actual_archive_sha256 actual_archive_size actual_archive_sha256="$(sha256sum "$archive_path" | awk '{print $1}')" actual_archive_size="$(wc -c < "$archive_path" | tr -d '[:space:]')" - if [[ "$actual_archive_sha256" != "${validated[0]}" ]]; then + if [[ "$actual_archive_sha256" != "${validated[1]}" ]]; then fail "shared Docker image artifact archive SHA-256 mismatch." fi - if [[ "$actual_archive_size" != "${validated[1]}" ]]; then + if [[ "$actual_archive_size" != "${validated[2]}" ]]; then fail "shared Docker image artifact archive size mismatch." fi zstd -t "$archive_path" @@ -414,7 +417,7 @@ NODE local index expected_ref expected_id actual_id for index in "${!image_refs[@]}"; do - IFS=$'\t' read -r expected_ref expected_id <<< "${validated[$((index + 2))]}" + IFS=$'\t' read -r expected_ref expected_id <<< "${validated[$((index + 3))]}" if [[ "$expected_ref" != "${image_refs[$index]}" ]]; then fail "shared Docker image artifact ref mismatch after validation: ${image_refs[$index]}" fi diff --git a/scripts/docs-i18n/go.mod b/scripts/docs-i18n/go.mod index 9e5b602fdc6d..ad118c3d01e5 100644 --- a/scripts/docs-i18n/go.mod +++ b/scripts/docs-i18n/go.mod @@ -1,11 +1,11 @@ module github.com/openclaw/openclaw/scripts/docs-i18n -go 1.25.0 +go 1.26.0 -toolchain go1.25.12 +toolchain go1.26.6 require ( github.com/yuin/goldmark v1.8.5 - golang.org/x/net v0.57.0 + golang.org/x/net v0.58.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/scripts/docs-i18n/go.sum b/scripts/docs-i18n/go.sum index ffeb417b3636..91f7f655edc7 100644 --- a/scripts/docs-i18n/go.sum +++ b/scripts/docs-i18n/go.sum @@ -1,7 +1,7 @@ github.com/yuin/goldmark v1.8.5 h1:r6N5afV5qj/5S4UTch8agZHJ8UxNCMwX7WjkkJam2NA= github.com/yuin/goldmark v1.8.5/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= -golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= -golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/scripts/docs-link-audit.mts b/scripts/docs-link-audit.mts index fb5a839a425e..71fbeca1c3c8 100644 --- a/scripts/docs-link-audit.mts +++ b/scripts/docs-link-audit.mts @@ -22,7 +22,7 @@ const MARKDOWN_PARSER = new MarkdownIt({ html: false }); const HTML_MARKDOWN_PARSER = new MarkdownIt({ html: true }); type MarkdownToken = ReturnType[number]; const VERBATIM_MDX_ELEMENTS = new Set(["code", "pre", "script", "style", "textarea"]); -const MINTLIFY_CLI_VERSION = "4.2.715"; +const MINTLIFY_CLI_VERSION = "4.2.804"; const MINTLIFY_BROKEN_LINKS_ARGS = [ "exec", "--yes", @@ -190,12 +190,15 @@ function projectExternalLinkMarkdown(raw: string) { } } } - const childUrl = (child: MarkdownToken): string | null | undefined => - child.type === "link_open" - ? child.attrGet("href") - : child.type === "image" - ? child.attrGet("src") - : undefined; + const childUrl = (child: MarkdownToken): string | undefined => { + const value = + child.type === "link_open" + ? child.attrGet("href") + : child.type === "image" + ? child.attrGet("src") + : undefined; + return typeof value === "string" ? value : undefined; + }; const sourceLineForUrl = (token: MarkdownToken, url: string): number => { if (!token.map) { return 0; diff --git a/scripts/e2e/Dockerfile b/scripts/e2e/Dockerfile index 41cd707f3ae8..e652530690fc 100644 --- a/scripts/e2e/Dockerfile +++ b/scripts/e2e/Dockerfile @@ -4,7 +4,7 @@ # `bare` is a clean Node/Git runner for install/update lanes. `functional` # installs the prepared OpenClaw npm tarball into /app for built-app lanes. -FROM node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d AS e2e-runner +FROM node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03 AS e2e-runner # openssl provisions short-lived fixture certificates for HTTPS-only provider # routes. python3 covers package/plugin install paths that execute helper scripts. @@ -15,7 +15,7 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* RUN corepack enable -RUN npm install -g tsx@4.21.0 --no-fund --no-audit +RUN npm install -g tsx@4.23.12 --no-fund --no-audit RUN useradd --create-home --shell /bin/bash appuser \ && mkdir -p /app \ diff --git a/scripts/e2e/Dockerfile.qr-import b/scripts/e2e/Dockerfile.qr-import index 7ad67e494b53..49db900ad39b 100644 --- a/scripts/e2e/Dockerfile.qr-import +++ b/scripts/e2e/Dockerfile.qr-import @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.7 -FROM node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d +FROM node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03 RUN corepack enable diff --git a/scripts/e2e/cli-installer-distribution-docker.sh b/scripts/e2e/cli-installer-distribution-docker.sh index 43872afe3ad6..01c83638ce21 100755 --- a/scripts/e2e/cli-installer-distribution-docker.sh +++ b/scripts/e2e/cli-installer-distribution-docker.sh @@ -41,7 +41,7 @@ bash /tmp/openclaw-source/scripts/install-cli.sh \ --version "$OPENCLAW_SOURCE_SHA" \ --no-git-update \ --prefix /tmp/openclaw-prefix \ - --node-version 24.15.0 \ + --node-version 24.19.0 \ --no-onboard prefix_node=/tmp/openclaw-prefix/tools/node/bin/node diff --git a/scripts/e2e/docker-package-install.sh b/scripts/e2e/docker-package-install.sh index ed1e3e289bd1..9b03bbb7e10a 100755 --- a/scripts/e2e/docker-package-install.sh +++ b/scripts/e2e/docker-package-install.sh @@ -64,7 +64,7 @@ DOCKER_COMMAND_TIMEOUT="$DOCKER_RUN_TIMEOUT" docker_e2e_docker_run_cmd run -d \ set -euo pipefail export PNPM_HOME=/tmp/pnpm-home export PATH="$PNPM_HOME:$PATH" - corepack prepare pnpm@11.15.1 --activate + corepack prepare pnpm@11.22.0 --activate pnpm config set global-bin-dir "$PNPM_HOME" pnpm config set global-dir /tmp/pnpm-global pnpm add --global --allow-build=openclaw /tmp/openclaw-current.tgz diff --git a/scripts/e2e/openwebui-docker.sh b/scripts/e2e/openwebui-docker.sh index b423bd3e248e..9ccf7736effa 100755 --- a/scripts/e2e/openwebui-docker.sh +++ b/scripts/e2e/openwebui-docker.sh @@ -7,7 +7,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" source "$ROOT_DIR/scripts/lib/docker-e2e-image.sh" IMAGE_NAME="$(docker_e2e_resolve_image "openclaw-openwebui-e2e" OPENCLAW_OPENWEBUI_E2E_IMAGE)" -OPENWEBUI_IMAGE="${OPENWEBUI_IMAGE:-ghcr.io/open-webui/open-webui:v0.8.10}" +OPENWEBUI_IMAGE="${OPENWEBUI_IMAGE:-ghcr.io/open-webui/open-webui:v0.11.0@sha256:72c0ba641ba75e7aa52655cb242570906ececd09b1140fb736483038a22b3228}" MAX_MEMORY_MIB="$(docker_e2e_read_nonnegative_decimal_env OPENCLAW_OPENWEBUI_MAX_MEMORY_MIB 8192)" MAX_CPU_PERCENT="$(docker_e2e_read_nonnegative_decimal_env OPENCLAW_OPENWEBUI_MAX_CPU_PERCENT 1600)" # Keep the default on the preferred GPT-5 OpenAI model for Open WebUI @@ -198,7 +198,7 @@ docker_e2e_docker_cmd run -d \ "$OPENWEBUI_IMAGE" >/dev/null echo "Waiting for Open WebUI..." -if ! docker_e2e_wait_container_bash_while_running "$OW_NAME" "$GW_NAME" 240 1 "node scripts/e2e/lib/openwebui/http-probe.mjs 'http://$OW_NAME:$WEBUI_PORT/' lt500"; then +if ! docker_e2e_wait_container_bash_while_running "$OW_NAME" "$GW_NAME" 240 1 "node scripts/e2e/lib/openwebui/http-probe.mjs 'http://$OW_NAME:$WEBUI_PORT/health' 200"; then echo "Open WebUI failed to start" docker_e2e_docker_cmd logs "$OW_NAME" 2>&1 | tail -n 200 || true exit 1 diff --git a/scripts/e2e/parallels/windows-git.ts b/scripts/e2e/parallels/windows-git.ts index 97cb820c540b..af1e0ec12158 100644 --- a/scripts/e2e/parallels/windows-git.ts +++ b/scripts/e2e/parallels/windows-git.ts @@ -1,25 +1,42 @@ // Windows Git script supports OpenClaw repository automation. +import { createHash } from "node:crypto"; +import { createReadStream } from "node:fs"; import path from "node:path"; import type { WindowsGuest } from "./guest-transports.ts"; import { die, run, say } from "./host-command.ts"; import { psSingleQuote } from "./powershell.ts"; import type { HostServer } from "./types.ts"; +async function sha256File(filePath: string): Promise { + const hash = createHash("sha256"); + for await (const chunk of createReadStream(filePath)) { + hash.update(chunk); + } + return hash.digest("hex"); +} + export async function prepareMinGitZip(tgzDir: string): Promise { const metadata = run( "python3", [ "-c", String.raw`import json +import re import urllib.request preferred_names = [ - "MinGit-2.55.0.3-64-bit.zip", - "MinGit-2.55.0.3-arm64.zip", + "MinGit-2.55.0.4-64-bit.zip", + "MinGit-2.55.0.4-arm64.zip", ] -fallback_urls = { - "MinGit-2.55.0.3-arm64.zip": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.3/MinGit-2.55.0.3-arm64.zip", - "MinGit-2.55.0.3-64-bit.zip": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.3/MinGit-2.55.0.3-64-bit.zip", +fallback_assets = { + "MinGit-2.55.0.4-arm64.zip": { + "browser_download_url": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.4/MinGit-2.55.0.4-arm64.zip", + "digest": "sha256:033eb6b927d804558ae479a6ae6c6ed86da42cabc0d424844a3e108c780a58cc", + }, + "MinGit-2.55.0.4-64-bit.zip": { + "browser_download_url": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.4/MinGit-2.55.0.4-64-bit.zip", + "digest": "sha256:4e03f94c2ffbf70be337e005cee02661c732dbfc81031a078bda9299b9a7d644", + }, } try: @@ -33,8 +50,10 @@ try: with urllib.request.urlopen(req, timeout=30) as response: data = json.load(response) except Exception: + fallback = fallback_assets[preferred_names[0]] print(preferred_names[0]) - print(fallback_urls[preferred_names[0]]) + print(fallback["browser_download_url"]) + print(fallback["digest"]) raise SystemExit(0) assets = data.get("assets", []) @@ -71,14 +90,20 @@ if best is None: if best is None: raise SystemExit("no MinGit asset found") +digest = best.get("digest", "") +if not re.fullmatch(r"sha256:[0-9a-f]{64}", digest): + raise SystemExit("MinGit asset missing SHA-256 digest") + print(best["name"]) -print(best["browser_download_url"])`, +print(best["browser_download_url"]) +print(digest)`, ], { quiet: true }, ).stdout.trim(); - const [name, url] = metadata.split("\n"); - if (!name || !url) { - die("failed to resolve MinGit download metadata"); + const [name, url, digest] = metadata.split("\n"); + const expectedSha256 = digest?.match(/^sha256:([a-f\d]{64})$/u)?.[1]; + if (!name || !url || !expectedSha256) { + die("failed to resolve checksummed MinGit download metadata"); } const zipPath = path.join(tgzDir, name); say(`Download ${name}`); @@ -106,6 +131,10 @@ print(best["browser_download_url"])`, timeoutMs: 270_000, }, ); + const actualSha256 = await sha256File(zipPath); + if (actualSha256 !== expectedSha256) { + throw new Error(`MinGit SHA-256 mismatch: expected ${expectedSha256}, got ${actualSha256}`); + } return zipPath; } diff --git a/scripts/e2e/plugin-binding-command-escape.Dockerfile b/scripts/e2e/plugin-binding-command-escape.Dockerfile index 49639278c048..8476d4584b41 100644 --- a/scripts/e2e/plugin-binding-command-escape.Dockerfile +++ b/scripts/e2e/plugin-binding-command-escape.Dockerfile @@ -1,4 +1,4 @@ -FROM node:24-bookworm-slim@sha256:242549cd46785b480c832479a730f4f2a20865d61ea2e404fdb2a5c3d3b73ecf +FROM node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03 RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates git python3 \ diff --git a/scripts/e2e/telegram-mantis-lane.ts b/scripts/e2e/telegram-mantis-lane.ts index bd0a3421f1aa..4be3df2a2ca2 100644 --- a/scripts/e2e/telegram-mantis-lane.ts +++ b/scripts/e2e/telegram-mantis-lane.ts @@ -457,12 +457,20 @@ function readPublicFile( maxBytes: number, ): { relative: string; resolved: string; text: string } { const resolved = fs.realpathSync(input); + const expected = fs.lstatSync(resolved); const descriptor = fs.openSync(resolved, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW); try { - // Containment is checked after the open so the descriptor being read is the file the - // check accepted, not one a concurrent swap redirected it to. - const relative = publicRelativePath(root, resolved, label); const stat = fs.fstatSync(descriptor); + // Bind the read to the path inspected before open so a concurrent swap cannot redirect it. + if (stat.dev !== expected.dev || stat.ino !== expected.ino) { + throw new Error(`${label} must be inside the Mantis output directory.`); + } + // Linux pins the opened path directly; other platforms reject pre-open inode swaps. + const opened = + process.platform === "linux" + ? fs.realpathSync(`/proc/self/fd/${descriptor}`) + : fs.realpathSync(resolved); + const relative = publicRelativePath(root, opened, label); if (!stat.isFile() || stat.size > maxBytes) { throw new Error(`${label} must be a regular file no larger than ${maxBytes} bytes.`); } diff --git a/scripts/e2e/upgrade-survivor-docker.sh b/scripts/e2e/upgrade-survivor-docker.sh index 96d8d511220f..779204e86eea 100755 --- a/scripts/e2e/upgrade-survivor-docker.sh +++ b/scripts/e2e/upgrade-survivor-docker.sh @@ -249,14 +249,14 @@ if [ "${OPENCLAW_UPGRADE_SURVIVOR_PUBLISHED_BASELINE:-0}" = "1" ]; then -e OPENCLAW_UPGRADE_SURVIVOR_STATUS_BUDGET_SECONDS="$STATUS_BUDGET_SECONDS" \ -e OPENCLAW_UPGRADE_SURVIVOR_CLAWHUB_FIXTURE_SERVER=/tmp/openclaw-clawhub-fixture-server.cjs \ "${PROBE_ENV_ARGS[@]}" \ - "${LIVE_OPENAI_ENV_ARGS[@]}" \ + ${LIVE_OPENAI_ENV_ARGS[@]+"${LIVE_OPENAI_ENV_ARGS[@]}"} \ -v "$ARTIFACT_DIR:/tmp/openclaw-upgrade-survivor-artifacts" \ -v "$TRUSTED_TSX_NODE_MODULES:/tmp/openclaw-release-harness/node_modules:ro" \ -v "$HARNESS_ROOT_DIR/scripts/e2e/lib/clawhub-fixture-server.cjs:/tmp/openclaw-clawhub-fixture-server.cjs:ro" \ -v "$HARNESS_ROOT_DIR/scripts/e2e/lib/upgrade-survivor/run.sh:/tmp/openclaw-upgrade-survivor-run.sh:ro" \ - "${PREPUBLISH_PLUGIN_REGISTRY_ARGS[@]}" \ - "${DOCKER_E2E_PACKAGE_ARGS[@]}" \ - "${DOCKER_RUN_USER_ARGS[@]}" \ + ${PREPUBLISH_PLUGIN_REGISTRY_ARGS[@]+"${PREPUBLISH_PLUGIN_REGISTRY_ARGS[@]}"} \ + ${DOCKER_E2E_PACKAGE_ARGS[@]+"${DOCKER_E2E_PACKAGE_ARGS[@]}"} \ + ${DOCKER_RUN_USER_ARGS[@]+"${DOCKER_RUN_USER_ARGS[@]}"} \ "$IMAGE_NAME" \ timeout --kill-after=30s "$DOCKER_RUN_TIMEOUT" bash /tmp/openclaw-upgrade-survivor-run.sh exit 0 diff --git a/scripts/install-cli.sh b/scripts/install-cli.sh index 936af10f8666..43ee44f833c7 100755 --- a/scripts/install-cli.sh +++ b/scripts/install-cli.sh @@ -71,8 +71,8 @@ OPENCLAW_EFFECTIVE_HOME="$(resolve_home_path "${OPENCLAW_HOME:-$HOME}")" PREFIX="${OPENCLAW_PREFIX:-${HOME}/.openclaw}" OPENCLAW_VERSION="${OPENCLAW_VERSION:-latest}" REQUIRED_COMPATIBLE_VERSION="" -DEFAULT_NODE_VERSION="24.15.0" -ARMV7_DEFAULT_NODE_VERSION="22.22.3" +DEFAULT_NODE_VERSION="24.19.0" +ARMV7_DEFAULT_NODE_VERSION="22.23.2" NODE_VERSION="${OPENCLAW_NODE_VERSION:-${DEFAULT_NODE_VERSION}}" NODE_VERSION_REQUESTED=0 if [[ -n "${OPENCLAW_NODE_VERSION:-}" ]]; then @@ -105,7 +105,7 @@ Usage: install-cli.sh [options] --git-dir, --dir Checkout directory (default: ~/openclaw, or \$OPENCLAW_HOME/openclaw) --version OpenClaw version (default: latest) --compatible-with Refuse a CLI that cannot modify config written by - --node-version Node version (default: 24.15.0; 22.22.3 on Linux ARMv7) + --node-version Node version (default: 24.19.0; 22.23.2 on Linux ARMv7) --onboard Run "openclaw onboard" after install --no-onboard Skip onboarding (default) --set-npm-prefix Force npm prefix to ~/.npm-global if current prefix is not writable (Linux) @@ -432,7 +432,7 @@ select_node_version_for_platform() { NODE_VERSION="$ARMV7_DEFAULT_NODE_VERSION" fi if [[ "$os" == "linux" && "$arch" == "armv7l" && "${NODE_VERSION%%.*}" != "22" ]]; then - fail "Linux ARMv7 requires Node 22.22.3+ because official Node 24+ binaries are unavailable; use --node-version 22.22.3." + fail "Linux ARMv7 requires Node 22.22.3+ because official Node 24+ binaries are unavailable; use --node-version 22.23.2." fi } @@ -1133,7 +1133,7 @@ install_node() { installed_version="$("$(node_bin)" -v 2>/dev/null || echo unknown)" required_version="$(required_node_version)" sqlite_version="$(linked_node_sqlite_version)" - fail "Installed Node ${NODE_VERSION} must provide Node >= ${required_version} with WAL-reset-safe SQLite; found Node ${installed_version}, SQLite ${sqlite_version}. Re-run with --node-version 24.15.0 (or newer)" + fail "Installed Node ${NODE_VERSION} must provide Node >= ${required_version} with WAL-reset-safe SQLite; found Node ${installed_version}, SQLite ${sqlite_version}. Re-run with --node-version 24.19.0 (or newer)" fi emit_json "{\"event\":\"step\",\"name\":\"node\",\"status\":\"ok\",\"version\":\"${NODE_VERSION}\"}" } diff --git a/scripts/install-trufflehog.sh b/scripts/install-trufflehog.sh index 262ede833d6d..b8c457806391 100755 --- a/scripts/install-trufflehog.sh +++ b/scripts/install-trufflehog.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -euo pipefail -trufflehog_version="3.95.9" +trufflehog_version="3.97.0" trufflehog_bin_dir="${OPENCLAW_TRUFFLEHOG_BIN_DIR:-/usr/local/bin}" log() { @@ -48,8 +48,8 @@ trufflehog_arch() { trufflehog_sha256() { case "$1" in - amd64) printf '%s\n' "f6d1106b85107d79527ed7a5b98b592beadd8b770dc3c9e8c1ad99e1b2cf127e" ;; - arm64) printf '%s\n' "9d9c2ec4ea36a089a9c5aaafe1969d176013ddf9f44d68e8cd75291aed8c83ed" ;; + amd64) printf '%s\n' "62224de2f9dd7cd418800feb953760a302ed2f82a7c547fe1146a4874fb179e4" ;; + arm64) printf '%s\n' "f48f57e3d4343377865b1b64653f96d381d61a7792d89d026e85524732039fde" ;; *) log "unsupported TruffleHog architecture: $1" return 1 diff --git a/scripts/lib/swift-toolchain.sh b/scripts/lib/swift-toolchain.sh index 6c01c555e53b..c16f3dfd5941 100644 --- a/scripts/lib/swift-toolchain.sh +++ b/scripts/lib/swift-toolchain.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash REQUIRED_SWIFT_TOOLS_MAJOR=6 -REQUIRED_SWIFT_TOOLS_MINOR=2 +REQUIRED_SWIFT_TOOLS_MINOR=3 +REQUIRED_XCODE_MAJOR=26 +REQUIRED_XCODE_MINOR=4 require_swift_toolchain() { local xcodebuild_version @@ -18,7 +20,7 @@ require_swift_toolchain() { if ! swift_version="$(swift --version 2>&1)"; then printf '%s\n' "$swift_version" >&2 echo "ERROR: OpenClaw macOS app packaging requires Swift tools ${REQUIRED_SWIFT_TOOLS_MAJOR}.${REQUIRED_SWIFT_TOOLS_MINOR}+." >&2 - echo " Install/select Xcode 26.x or newer before running macOS packaging scripts." >&2 + echo " Install/select Xcode 26.4 or newer before running macOS packaging scripts." >&2 return 1 fi @@ -37,7 +39,23 @@ require_swift_toolchain() { (( major == REQUIRED_SWIFT_TOOLS_MAJOR && minor < REQUIRED_SWIFT_TOOLS_MINOR )); then printf '%s\n' "$swift_version" >&2 echo "ERROR: OpenClaw macOS app packaging requires Swift tools ${REQUIRED_SWIFT_TOOLS_MAJOR}.${REQUIRED_SWIFT_TOOLS_MINOR}+." >&2 - echo " Current Swift is ${major}.${minor}; install/select Xcode 26.x or newer." >&2 + echo " Current Swift is ${major}.${minor}; install/select Xcode 26.4 or newer." >&2 + return 1 + fi + + local xcode_major_minor xcode_major xcode_minor + xcode_major_minor="$(printf '%s\n' "$xcodebuild_version" | sed -nE 's/^Xcode ([0-9]+)\.([0-9]+).*/\1 \2/p' | head -n 1)" + if [[ -z "$xcode_major_minor" ]]; then + printf '%s\n' "$xcodebuild_version" >&2 + echo "ERROR: Could not parse selected Xcode version; OpenClaw macOS app packaging requires Xcode 26.4+." >&2 + return 1 + fi + + read -r xcode_major xcode_minor <<< "$xcode_major_minor" + if (( xcode_major < REQUIRED_XCODE_MAJOR )) || + (( xcode_major == REQUIRED_XCODE_MAJOR && xcode_minor < REQUIRED_XCODE_MINOR )); then + printf '%s\n' "$xcodebuild_version" >&2 + echo "ERROR: OpenClaw macOS app packaging requires Xcode 26.4+; current Xcode is ${xcode_major}.${xcode_minor}." >&2 return 1 fi } diff --git a/scripts/mantis/mantis-sut-container.sh b/scripts/mantis/mantis-sut-container.sh index 308f7e85e81a..feb5bafe8236 100644 --- a/scripts/mantis/mantis-sut-container.sh +++ b/scripts/mantis/mantis-sut-container.sh @@ -1,7 +1,7 @@ #!/bin/bash set -euo pipefail -readonly image="node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d" +readonly image="node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03" readonly worktree_root_file="/etc/openclaw-mantis-sut-worktrees" readonly revisions_file="/etc/openclaw-mantis-sut-revisions" readonly runtime_root_file="/etc/openclaw-mantis-sut-runtime-root" diff --git a/scripts/materialize-clawhub-cli.sh b/scripts/materialize-clawhub-cli.sh index 5c8ac1fb5783..60d96f8dacd1 100755 --- a/scripts/materialize-clawhub-cli.sh +++ b/scripts/materialize-clawhub-cli.sh @@ -8,8 +8,8 @@ github_output="${3:-}" package_json="${source_root}/package.json" package_lock="${source_root}/package-lock.json" -expected_lock_sha256="f44f670d70f13a8cde566a174cae5be682ad98456ec7a85aafd497f7d8c71816" -expected_clawhub_integrity="sha512-YvUImhsVaM90BUAv3uP7lfABziwR5XL3ch2Owa+GvNxwQ2xzZFmZC0yVjAtQbvep+dDDS16nUGRwKx7jqnTOEA==" +expected_lock_sha256="9606849698f041afdd2c2600633320f6b7c1e5136d06b98ce16c169c055c0f83" +expected_clawhub_integrity="sha512-VwM6FQrZVarFRDiEqG42npUeyCu/iLhPnpO+b7kKIGRXv+TA6Lb8pboHnIgT6cmjFEnW3j/pTbshWeDQMQ7QWQ==" test -f "${package_json}" test -f "${package_lock}" if [[ -e "${destination}" || -L "${destination}" ]]; then @@ -53,7 +53,7 @@ clawhub_version="$( CLAWHUB_CLI_ROOT="${destination}" \ node -p "require(require('node:path').join(process.env.CLAWHUB_CLI_ROOT, 'node_modules/clawhub/package.json')).version" )" -[[ "${clawhub_version}" == "0.23.1" ]] || { +[[ "${clawhub_version}" == "0.23.3" ]] || { echo "Pinned ClawHub CLI version mismatch: ${clawhub_version}" >&2 exit 1 } diff --git a/scripts/materialize-vercel-cli.sh b/scripts/materialize-vercel-cli.sh index 785dd89d5877..375ee46318d4 100755 --- a/scripts/materialize-vercel-cli.sh +++ b/scripts/materialize-vercel-cli.sh @@ -8,8 +8,8 @@ github_output="${3:-}" package_json="${source_root}/package.json" package_lock="${source_root}/package-lock.json" -expected_lock_sha256="db00a6dd0cab114931bc2b5a09c5a0556020c3652381019e2f817cc0426e782c" -expected_vercel_integrity="sha512-Mv1807Ptxhy6cQne5xV/2dD+bUGYRtpV3sLVPXEW115RBN6K/ssuvOww8eNfdGucFH9C+p5ccQF07XSyAvBPLQ==" +expected_lock_sha256="218f2254dddf8f978541736031e8cf5a3e7d368b71e98d47a67322bbe17f3897" +expected_vercel_integrity="sha512-sxCp4+S0QlO+LEvGxboxB5tbDZvVE4gO2YeRuGvdamK5CYHTOK4WDHE3u+E8VIe8FVK9mtjKeo4Jnxez5MfNdw==" test -f "${package_json}" test -f "${package_lock}" if [[ -e "${destination}" || -L "${destination}" ]]; then @@ -53,7 +53,7 @@ vercel_version="$( VERCEL_CLI_ROOT="${destination}" \ node -p "require(require('node:path').join(process.env.VERCEL_CLI_ROOT, 'node_modules/vercel/package.json')).version" )" -[[ "${vercel_version}" == "58.4.4" ]] || { +[[ "${vercel_version}" == "59.1.3" ]] || { echo "Pinned Vercel CLI version mismatch: ${vercel_version}" >&2 exit 1 } diff --git a/scripts/plugin-release-pretag-pack-check.ts b/scripts/plugin-release-pretag-pack-check.ts index e35237633ff8..be97ddcbd85e 100644 --- a/scripts/plugin-release-pretag-pack-check.ts +++ b/scripts/plugin-release-pretag-pack-check.ts @@ -8,7 +8,7 @@ import { pathToFileURL } from "node:url"; import { collectClawHubPublishablePluginPackages } from "./lib/plugin-clawhub-release.ts"; import { collectPublishablePluginPackages } from "./lib/plugin-npm-release.ts"; -const DEFAULT_CLAWHUB_CLI_PACKAGE = "clawhub@0.23.1"; +const DEFAULT_CLAWHUB_CLI_PACKAGE = "clawhub@0.23.3"; type PluginReleasePretagPackTarget = { packageDir: string; diff --git a/scripts/run-opengrep.sh b/scripts/run-opengrep.sh index ec5c7189d03c..f9635dbdab0c 100755 --- a/scripts/run-opengrep.sh +++ b/scripts/run-opengrep.sh @@ -46,7 +46,7 @@ if ! command -v opengrep >/dev/null 2>&1; then error: 'opengrep' not found on PATH. Install with one of: - curl -fsSL https://raw.githubusercontent.com/opengrep/opengrep/v1.25.0/install.sh | bash -s -- -v v1.25.0 + curl -fsSL https://raw.githubusercontent.com/opengrep/opengrep/v1.27.1/install.sh | bash -s -- -v v1.27.1 brew install opengrep/tap/opengrep pipx install opengrep @@ -118,7 +118,7 @@ write_empty_sarif() { "driver": { "name": "Opengrep OSS", "informationUri": "https://opengrep.dev", - "semanticVersion": "1.25.0", + "semanticVersion": "1.27.1", "rules": [] } }, diff --git a/scripts/test-install-sh-docker.sh b/scripts/test-install-sh-docker.sh index 732e89b5834e..bc2ee1174984 100755 --- a/scripts/test-install-sh-docker.sh +++ b/scripts/test-install-sh-docker.sh @@ -268,7 +268,7 @@ SKIP_FRESHNESS="${OPENCLAW_INSTALL_SMOKE_SKIP_FRESHNESS:-0}" FRESHNESS_INSTALL_URL="${OPENCLAW_INSTALL_SMOKE_FRESHNESS_INSTALL_URL:-file:///tmp/openclaw-install.sh}" # npm min-release-age is days; 10000 keeps the control failure independent of normal release cadence. FRESHNESS_MIN_RELEASE_AGE="${OPENCLAW_INSTALL_FRESHNESS_MIN_RELEASE_AGE:-10000}" -FRESHNESS_NPM_VERSION="${OPENCLAW_INSTALL_FRESHNESS_NPM_VERSION:-11.14.1}" +FRESHNESS_NPM_VERSION="${OPENCLAW_INSTALL_FRESHNESS_NPM_VERSION:-11.19.0}" UPDATE_BASELINE_VERSION="${OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE:-latest}" UPDATE_PACKAGE_SPEC="${OPENCLAW_INSTALL_SMOKE_UPDATE_PACKAGE_SPEC:-}" UPDATE_DIST_IMAGE="${OPENCLAW_INSTALL_SMOKE_UPDATE_DIST_IMAGE:-}" diff --git a/skills/sherpa-onnx-tts/SKILL.md b/skills/sherpa-onnx-tts/SKILL.md index 845be1796470..b30a5c5d87a7 100644 --- a/skills/sherpa-onnx-tts/SKILL.md +++ b/skills/sherpa-onnx-tts/SKILL.md @@ -14,7 +14,7 @@ metadata: "id": "download-runtime-macos", "kind": "download", "os": ["darwin"], - "url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.2/sherpa-onnx-v1.13.2-osx-universal2-shared.tar.bz2", + "url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.5/sherpa-onnx-v1.13.5-osx-universal2-shared.tar.bz2", "archive": "tar.bz2", "extract": true, "stripComponents": 1, @@ -25,7 +25,7 @@ metadata: "id": "download-runtime-linux-x64", "kind": "download", "os": ["linux"], - "url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.2/sherpa-onnx-v1.13.2-linux-x64-shared.tar.bz2", + "url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.5/sherpa-onnx-v1.13.5-linux-x64-shared.tar.bz2", "archive": "tar.bz2", "extract": true, "stripComponents": 1, @@ -36,7 +36,7 @@ metadata: "id": "download-runtime-win-x64", "kind": "download", "os": ["win32"], - "url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.2/sherpa-onnx-v1.13.2-win-x64-shared-MD-Release.tar.bz2", + "url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.5/sherpa-onnx-v1.13.5-win-x64-shared-MD-Release.tar.bz2", "archive": "tar.bz2", "extract": true, "stripComponents": 1, diff --git a/src/agents/tools/computer-tool-guidance.ts b/src/agents/tools/computer-tool-guidance.ts index 3aba5060b91d..298c4d6355eb 100644 --- a/src/agents/tools/computer-tool-guidance.ts +++ b/src/agents/tools/computer-tool-guidance.ts @@ -4,7 +4,7 @@ import type { } from "../../plugins/computer-use-contract.js"; const COMPUTER_USE_GUIDANCE_PROFILE = { - sourceTag: "cua-driver-rs-v0.19.3", + sourceTag: "cua-driver-rs-v0.20.0", elementActions: [ "left_click", "right_click", diff --git a/src/cli/logs-cli.runtime.test.ts b/src/cli/logs-cli.runtime.test.ts index 5cc726689484..cf13e10980ed 100644 --- a/src/cli/logs-cli.runtime.test.ts +++ b/src/cli/logs-cli.runtime.test.ts @@ -40,7 +40,7 @@ describe("execFileUtf8Tail", () => { it("keeps a bounded stderr tail for failed commands", async () => { const result = await execFileUtf8Tail( process.execPath, - ["-e", "process.stderr.write('😀' + 'x'.repeat(64 * 1024)); process.exit(1)"], + ["-e", "process.stderr.write('😀' + 'x'.repeat(64 * 1024)); process.exitCode = 1"], { maxBytes: 1024 }, ); expect(result.code).toBe(1); diff --git a/src/cli/node-cli/daemon.test.ts b/src/cli/node-cli/daemon.test.ts index 669a27d49083..f3fdcba79f84 100644 --- a/src/cli/node-cli/daemon.test.ts +++ b/src/cli/node-cli/daemon.test.ts @@ -1,5 +1,5 @@ // Node daemon tests cover node daemon command runtime behavior and errors. -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { GatewayServiceRuntime } from "../../daemon/service-runtime.js"; import type { GatewayServiceCommandConfig } from "../../daemon/service-types.js"; import { @@ -129,6 +129,14 @@ vi.mock("../daemon-cli/shared.js", async () => { }; }); +function useLinuxPlatform(): void { + vi.spyOn(process, "platform", "get").mockReturnValue("linux"); +} + +afterEach(() => { + vi.restoreAllMocks(); +}); + describe("runNodeDaemonInstall", () => { beforeEach(() => { mocks.runtime.log.mockClear(); @@ -278,6 +286,7 @@ describe("runNodeDaemonInstall", () => { }); it("warns about disabled systemd lingering after a fresh install (text mode)", async () => { + useLinuxPlatform(); // isLoaded=true so the service-load verification passes and the linger // diagnostic runs on the verified-success path. mocks.service.isLoaded.mockResolvedValue(true); @@ -290,6 +299,7 @@ describe("runNodeDaemonInstall", () => { }); it("checks lingering for the same sudo target user as the systemd service", async () => { + useLinuxPlatform(); mocks.service.isLoaded.mockResolvedValue(true); mocks.resolveSystemdUserServiceAccount.mockReturnValue("debian"); mocks.readSystemdUserLingerStatus.mockResolvedValue({ user: "debian", linger: "no" }); @@ -307,6 +317,7 @@ describe("runNodeDaemonInstall", () => { }); it("includes the linger warning in JSON warnings after a fresh install", async () => { + useLinuxPlatform(); mocks.service.isLoaded.mockResolvedValue(true); await runNodeDaemonInstall({ force: true, json: true }); @@ -318,6 +329,7 @@ describe("runNodeDaemonInstall", () => { }); it("warns about disabled lingering on the already-installed short-circuit path", async () => { + useLinuxPlatform(); mocks.service.isLoaded.mockResolvedValue(true); await runNodeDaemonInstall({ force: false }); @@ -328,6 +340,7 @@ describe("runNodeDaemonInstall", () => { }); it("does not warn when systemd lingering is already enabled", async () => { + useLinuxPlatform(); mocks.service.isLoaded.mockResolvedValue(true); mocks.readSystemdUserLingerStatus.mockResolvedValue({ user: "pi", linger: "yes" }); await runNodeDaemonInstall({ force: true }); @@ -336,6 +349,7 @@ describe("runNodeDaemonInstall", () => { }); it("does not pollute the failure output when service.install throws", async () => { + useLinuxPlatform(); mocks.service.isLoaded.mockResolvedValue(true); mocks.service.install.mockRejectedValue(new Error("disk full")); await runNodeDaemonInstall({ force: true, json: true }); @@ -354,6 +368,7 @@ describe("runNodeDaemonInstall", () => { }); it("does not warn when service-load verification fails (regression for #107033 review)", async () => { + useLinuxPlatform(); // install() succeeded but the service is not loaded: the linger diagnostic // must NOT run, so a failed verification never tells the operator to fix // lingering for a service that was not successfully installed. @@ -373,6 +388,7 @@ describe("runNodeDaemonInstall", () => { }); it("skips the linger check when systemd user services are unavailable", async () => { + useLinuxPlatform(); mocks.service.isLoaded.mockResolvedValue(true); mocks.isSystemdUserServiceAvailable.mockResolvedValue(false); await runNodeDaemonInstall({ force: true }); diff --git a/src/commands/backup.test.ts b/src/commands/backup.test.ts index 45a84755edff..61c47311a71a 100644 --- a/src/commands/backup.test.ts +++ b/src/commands/backup.test.ts @@ -629,13 +629,14 @@ describe("backup commands", () => { const originalRaw = `${JSON.stringify(stableConfig, null, 2)}\n`; await fs.mkdir(workspaceDir, { recursive: true }); await fs.writeFile(configPath, originalRaw, "utf8"); + const canonicalWorkspaceDir = await fs.realpath(workspaceDir); const envSnapshot = captureEnv(["OPENCLAW_CONFIG_PATH"]); setTestEnvValue("OPENCLAW_CONFIG_PATH", configPath); try { const plan = await resolveBackupPlanFromDisk({ nowMs: 123 }); expect(plan.included).toContainEqual( - expect.objectContaining({ kind: "workspace", sourcePath: workspaceDir }), + expect.objectContaining({ kind: "workspace", sourcePath: canonicalWorkspaceDir }), ); expect(await fs.readFile(configPath, "utf8")).toBe(originalRaw); expect(plan.configPath).toBe(configPath); diff --git a/src/dockerfile.test.ts b/src/dockerfile.test.ts index 490d1994270e..d275aeb2bb57 100644 --- a/src/dockerfile.test.ts +++ b/src/dockerfile.test.ts @@ -79,10 +79,10 @@ describe("Dockerfile", () => { it("uses full bookworm for build stages and slim bookworm for runtime", async () => { const dockerfile = await readFile(dockerfilePath, "utf8"); expect(dockerfile).toContain( - 'ARG OPENCLAW_NODE_BOOKWORM_IMAGE="docker.io/library/node:24-bookworm@sha256:5711a0d445a1af54af9589066c646df387d1831a608226f4cd694fc59e745059"', + 'ARG OPENCLAW_NODE_BOOKWORM_IMAGE="docker.io/library/node:24-bookworm@sha256:934240a162082fd8b8a2f90cd5114446443f1eba1c5378f6687167ca405e6584"', ); expect(dockerfile).toContain( - 'ARG OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE="docker.io/library/node:24-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d"', + 'ARG OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE="docker.io/library/node:24-bookworm-slim@sha256:3638d9a6fe4030bd716be989438248074489337ba3275657f93595428be4fc03"', ); expect(dockerfile).toContain( 'ARG OPENCLAW_BUN_IMAGE="docker.io/oven/bun:1.3.14@sha256:e10577f0db68676a7024391c6e5cb4b879ebd17188ab750cf10024a6d700e5c4"', diff --git a/src/infra/npm-managed-root.test.ts b/src/infra/npm-managed-root.test.ts index 26a5c7a6453f..17c97f4f90c9 100644 --- a/src/infra/npm-managed-root.test.ts +++ b/src/infra/npm-managed-root.test.ts @@ -537,7 +537,7 @@ describe("managed npm root", () => { const expectedOverrides = workspace.overrides ?? {}; expect(expectedOverrides).toMatchObject({ - axios: "1.18.1", + axios: "1.19.0", "node-domexception": "npm:@nolyfill/domexception@1.0.28", }); await expect(readOpenClawManagedNpmRootOverrides()).resolves.toEqual(expectedOverrides); diff --git a/src/plugins/npm-install-security-scan.release.test.ts b/src/plugins/npm-install-security-scan.release.test.ts index 3114586c294a..d2ec933b6e88 100644 --- a/src/plugins/npm-install-security-scan.release.test.ts +++ b/src/plugins/npm-install-security-scan.release.test.ts @@ -116,6 +116,7 @@ function normalizePackedFindingPath(packedPath: string): string { "runtime-entry", "service", "session-catalog", + "shared-client", "transport-stdio", ]) { if (packedPath.startsWith(`dist/${prefix}-`) && packedPath.endsWith(".js")) { @@ -125,6 +126,48 @@ function normalizePackedFindingPath(packedPath: string): string { return packedPath; } +type GeneratedCodexFindingAttribution = { + hasSourceRegions: boolean; + sourceKey?: string; +}; + +function attributeGeneratedCodexFinding(params: { + packageName: string; + ruleId: string; + source: string; + line: number; +}): GeneratedCodexFindingAttribution { + const regionStack: string[] = []; + let hasSourceRegions = false; + let sourceAtFinding: string | undefined; + const lines = params.source.split("\n"); + for (const [index, line] of lines.entries()) { + const start = /^\s*\/\/#region\s+(\S+)\s*$/u.exec(line)?.[1]; + if (start) { + const normalized = toRepoPath(start); + regionStack.push(normalized); + if (normalized.startsWith("extensions/codex/src/")) { + hasSourceRegions = true; + } + } else if (/^\s*\/\/#endregion\b/u.test(line)) { + regionStack.pop(); + } + if (index + 1 === params.line) { + sourceAtFinding = regionStack.at(-1); + } + } + if ( + !sourceAtFinding?.startsWith("extensions/codex/src/") || + sourceAtFinding.split("/").includes("..") + ) { + return { hasSourceRegions }; + } + return { + hasSourceRegions, + sourceKey: `${params.packageName}:${params.ruleId}:${sourceAtFinding.slice("extensions/codex/".length)}`, + }; +} + function expandReviewedFindingCounts(counts: ReadonlyMap): string[] { return [...counts].flatMap(([key, count]) => Array.from({ length: count }, () => key)); } @@ -294,8 +337,26 @@ async function scanPublishablePluginPackage(plugin: PublishablePluginPackage): P const reviewedCriticalFindings: string[] = []; const expectedReviewedCriticalFindings: string[] = []; const unexpectedCriticalFindings: string[] = []; + const generatedCodexFindings: Array<{ + evidence: string; + line: number; + packedKey: string; + sourceKey: string; + }> = []; const packedFiles = await collectNpmPackedFiles(plugin.packageDir, plugin.packageName); for (const packedFile of packedFiles) { + const isGeneratedCodexFile = + plugin.packageName === "@openclaw/codex" && + packedFile.startsWith("dist/") && + packedFile.endsWith(".js"); + const hasSourceRegions = + isGeneratedCodexFile && + readFileSync(resolve(plugin.packageDir, packedFile), "utf8").includes( + "//#region extensions/codex/src/", + ); + if (hasSourceRegions) { + continue; + } for (const key of expectedOptionalReviewedFindingsForPackedPath( plugin.packageName, packedFile, @@ -304,34 +365,73 @@ async function scanPublishablePluginPackage(plugin: PublishablePluginPackage): P } } const stageDir = stageScannerRelevantPackedFiles(plugin.packageDir, packedFiles); - let summary: Awaited>; try { - summary = await scanDirectoryWithSummary(stageDir, { + const summary = await scanDirectoryWithSummary(stageDir, { excludeTestFiles: true, maxFiles: 10_000, }); + + for (const finding of summary.findings) { + if (finding.severity !== "critical") { + continue; + } + const rawPackedPath = toRepoPath(relative(stageDir, finding.file)); + const packedPath = normalizePackedFindingPath(rawPackedPath); + const key = `${plugin.packageName}:${finding.ruleId}:${packedPath}`; + if (plugin.packageName === "@openclaw/codex" && rawPackedPath.startsWith("dist/")) { + const attribution = attributeGeneratedCodexFinding({ + packageName: plugin.packageName, + ruleId: finding.ruleId, + source: readFileSync(finding.file, "utf8"), + line: finding.line, + }); + if (attribution.sourceKey) { + generatedCodexFindings.push({ + evidence: finding.evidence, + line: finding.line, + packedKey: key, + sourceKey: attribution.sourceKey, + }); + continue; + } + if (attribution.hasSourceRegions) { + unexpectedCriticalFindings.push([key, `${finding.line}`, finding.evidence].join(":")); + continue; + } + } + if (isReviewedPublishableCriticalFinding(key)) { + reviewedCriticalFindings.push(key); + continue; + } + unexpectedCriticalFindings.push([key, `${finding.line}`, finding.evidence].join(":")); + } + + const reviewedSourceFindings = new Set(reviewedCriticalFindings); + for (const generated of generatedCodexFindings) { + if ( + isReviewedPublishableCriticalFinding(generated.sourceKey) && + reviewedSourceFindings.has(generated.sourceKey) + ) { + continue; + } + unexpectedCriticalFindings.push( + [ + generated.packedKey, + `${generated.line}`, + `unreviewed generated source ${generated.sourceKey}`, + generated.evidence, + ].join(":"), + ); + } + + return { + reviewedCriticalFindings, + expectedReviewedCriticalFindings, + unexpectedCriticalFindings, + }; } finally { rmSync(stageDir, { recursive: true, force: true }); } - - for (const finding of summary.findings) { - if (finding.severity !== "critical") { - continue; - } - const packedPath = normalizePackedFindingPath(toRepoPath(relative(stageDir, finding.file))); - const key = `${plugin.packageName}:${finding.ruleId}:${packedPath}`; - if (isReviewedPublishableCriticalFinding(key)) { - reviewedCriticalFindings.push(key); - continue; - } - unexpectedCriticalFindings.push([key, `${finding.line}`, finding.evidence].join(":")); - } - - return { - reviewedCriticalFindings, - expectedReviewedCriticalFindings, - unexpectedCriticalFindings, - }; } describe("publishable plugin npm package install security scan", () => { @@ -409,11 +509,54 @@ describe("publishable plugin npm package install security scan", () => { "dist/session-catalog-current.js", ), ).toEqual(["@openclaw/codex:dangerous-exec:dist/session-catalog-.js"]); + expect( + expectedOptionalReviewedFindingsForPackedPath( + "@openclaw/codex", + "dist/shared-client-current.js", + ), + ).toEqual([]); expect( expectedOptionalReviewedFindingsForPackedPath("@openclaw/codex", "dist/client-retired.js"), ).toEqual([]); }); + it("attributes generated Codex findings to their enclosing source region", () => { + const generated = [ + "//#region extensions/codex/src/app-server/transport-process-containment.ts", + 'const inspector = execFile("ps", args, {', + "//#endregion", + 'execFile("outside-region")', + ].join("\n"); + + expect( + attributeGeneratedCodexFinding({ + packageName: "@openclaw/codex", + ruleId: "dangerous-exec", + source: generated, + line: 2, + }), + ).toEqual({ + hasSourceRegions: true, + sourceKey: "@openclaw/codex:dangerous-exec:src/app-server/transport-process-containment.ts", + }); + expect( + attributeGeneratedCodexFinding({ + packageName: "@openclaw/codex", + ruleId: "dangerous-exec", + source: generated, + line: 4, + }), + ).toEqual({ hasSourceRegions: true }); + expect( + attributeGeneratedCodexFinding({ + packageName: "@openclaw/codex", + ruleId: "dangerous-exec", + source: 'execFile("legacy")', + line: 1, + }), + ).toEqual({ hasSourceRegions: false }); + }); + it("accepts either complete reviewed Codex source layout", () => { const legacyLayout = expandReviewedFindingCounts( REVIEWED_CODEX_LEGACY_SOURCE_CRITICAL_FINDING_COUNTS, diff --git a/src/scripts/docs-link-audit.test.ts b/src/scripts/docs-link-audit.test.ts index 9d7f25292705..bb54be8dae85 100644 --- a/src/scripts/docs-link-audit.test.ts +++ b/src/scripts/docs-link-audit.test.ts @@ -413,7 +413,7 @@ describe("docs-link-audit", () => { args: [ "exec", "--yes", - "--package=mint@4.2.715", + "--package=mint@4.2.804", "--", "mint", "broken-links", @@ -480,7 +480,7 @@ describe("docs-link-audit", () => { "npm", "exec", "--yes", - "--package=mint@4.2.715", + "--package=mint@4.2.804", "--", "mint", "broken-links", diff --git a/src/secrets/resolve.test.ts b/src/secrets/resolve.test.ts index 7db4ceae605a..4b2a5b90953e 100644 --- a/src/secrets/resolve.test.ts +++ b/src/secrets/resolve.test.ts @@ -437,36 +437,37 @@ describe("secret ref resolver", () => { const scriptPath = await writeForkingNoOutputScript(root); const pidPath = path.join(root, "forked.pid"); let childPid: number | undefined; - const nativeSetTimeout = globalThis.setTimeout; - const noOutputTimeouts: Array<() => void> = []; - const setTimeoutSpy = vi - .spyOn(globalThis, "setTimeout") - .mockImplementation((callback, delay, ...args) => { - if (delay === 1_000) { - noOutputTimeouts.push(() => callback(...args)); - return nativeSetTimeout(() => undefined, 60_000); - } - return nativeSetTimeout(callback, delay, ...args); - }); + let resultPromise: Promise | undefined; try { - const resultPromise = resolveExecSecret(scriptPath, { + resultPromise = resolveExecSecret(scriptPath, { env: { NODE_BINARY: process.execPath, PID_FILE: pidPath }, - // Preserve production-like startup headroom; the test fires the - // re-armed timer only after the readiness byte arrives. noOutputTimeoutMs: 1_000, timeoutMs: 10_000, }); - await vi.waitFor(() => { - expect(noOutputTimeouts.length).toBeGreaterThanOrEqual(2); + const resultErrorPromise = resultPromise.catch((error: unknown) => error); + await vi.waitFor(async () => { + childPid = await readPidFile(pidPath); + expect(childPid).toBeGreaterThan(0); + }); + if (childPid === undefined) { + throw new Error("forked exec provider pid was not recorded"); + } + const error = await resultErrorPromise; + expect(isProviderScopedSecretResolutionError(error)).toBe(true); + if (!isProviderScopedSecretResolutionError(error)) { + throw new Error("expected a provider-scoped no-output error"); + } + expect(error).toMatchObject({ + code: "SECRET_PROVIDER_UNAVAILABLE", + source: "exec", + provider: "execmain", + message: 'Exec provider "execmain" produced no output for 1000ms.', }); - childPid = await readPidFile(pidPath); - noOutputTimeouts.at(-1)?.(); - await expect(resultPromise).rejects.toThrow('Exec provider "execmain" produced no output'); expect(await waitForPidToExit(childPid, 5_000)).toBe(true); } finally { - setTimeoutSpy.mockRestore(); killPidIfAlive(childPid); + await resultPromise?.catch(() => {}); } }); diff --git a/src/tui/components/custom-editor.test.ts b/src/tui/components/custom-editor.test.ts index 976095dee9fa..c0cb97a8c062 100644 --- a/src/tui/components/custom-editor.test.ts +++ b/src/tui/components/custom-editor.test.ts @@ -1,5 +1,5 @@ // Custom editor tests cover TUI editor key handling and cursor behavior. -import { CombinedAutocompleteProvider, TUI } from "@earendil-works/pi-tui"; +import { CombinedAutocompleteProvider, type TUI } from "@earendil-works/pi-tui"; import { afterEach, describe, expect, it, vi } from "vitest"; import { getSlashCommands, shouldSubmitExactArgumentCompletion } from "../commands.js"; import { editorTheme } from "../theme/theme.js"; diff --git a/src/tui/tui-reset-transition-pty.e2e.test.ts b/src/tui/tui-reset-transition-pty.e2e.test.ts index 9df3cf5caf73..bccef9d3d625 100644 --- a/src/tui/tui-reset-transition-pty.e2e.test.ts +++ b/src/tui/tui-reset-transition-pty.e2e.test.ts @@ -33,7 +33,8 @@ describe("TUI reset transition PTY", () => { OPENCLAW_TUI_PTY_SUBMIT_BURST_WINDOW_MS: "1000", OPENCLAW_TUI_PTY_TYPE_CHUNK_SIZE: "1", OPENCLAW_TUI_PTY_TYPE_DELAY_MS: "2", - TERM_PROGRAM: "Apple_Terminal", + // Synthetic Return must not consult the host macOS modifier state. + TERM_PROGRAM: undefined, NO_COLOR: undefined, }, exitTimeoutMs: EXIT_TIMEOUT_MS, diff --git a/src/tui/tui-session-actions-test-support.ts b/src/tui/tui-session-actions-test-support.ts index 9f2bad702448..e34c6135c312 100644 --- a/src/tui/tui-session-actions-test-support.ts +++ b/src/tui/tui-session-actions-test-support.ts @@ -1,5 +1,5 @@ // Provides typed dependency fixtures for TUI session-action tests. -import { TUI } from "@earendil-works/pi-tui"; +import { TuiMainScreen, type TUI } from "@earendil-works/pi-tui"; import { vi } from "vitest"; import { ChatLog } from "./components/chat-log.js"; import type { TuiBackend } from "./tui-backend.js"; @@ -79,7 +79,7 @@ export function makeTui(overrides: Partial = {}): TUI { clearScreen: vi.fn(), setTitle: vi.fn(), setProgress: vi.fn(), - } satisfies ConstructorParameters[0]; - const tui = new TUI(terminal); + } satisfies ConstructorParameters[0]; + const tui = new TuiMainScreen(terminal); return Object.assign(tui, { requestRender: vi.fn(), ...overrides }); } diff --git a/src/tui/tui.ts b/src/tui/tui.ts index 36e4e020c25b..5ca9cdd5488a 100644 --- a/src/tui/tui.ts +++ b/src/tui/tui.ts @@ -1,7 +1,14 @@ // Runs the interactive TUI loop and coordinates backend, input, and rendering. import { spawn } from "node:child_process"; import { setTimeout as delay } from "node:timers/promises"; -import { Container, Loader, matchesKey, ProcessTerminal, Text, TUI } from "@earendil-works/pi-tui"; +import { + Container, + Loader, + matchesKey, + ProcessTerminal, + Text, + TuiMainScreen, +} from "@earendil-works/pi-tui"; import { classifyGatewayConnectFailure } from "../../packages/gateway-protocol/src/connect-error-details.js"; import type { CommandEntry } from "../../packages/gateway-protocol/src/index.js"; import { @@ -908,7 +915,7 @@ async function runTuiUnlocked(opts: RunTuiOptions): Promise { setConsoleSubsystemFilter(["__openclaw_tui_quiet__"]); } - const tui = new TUI(new ProcessTerminal()); + const tui = new TuiMainScreen(new ProcessTerminal()); const dedupeBackspace = createBackspaceDeduper(); tui.addInputListener((data) => { const next = dedupeBackspace(data); diff --git a/src/types/microsoft-teams-sdk.d.ts b/src/types/microsoft-teams-sdk.d.ts index 21b1282652fe..fe92091f61a2 100644 --- a/src/types/microsoft-teams-sdk.d.ts +++ b/src/types/microsoft-teams-sdk.d.ts @@ -10,6 +10,18 @@ declare module "@microsoft/teams.apps" { } declare module "@microsoft/teams.api" { + /** Outbound message activity subset used for durable reply quoting. */ + export interface IMessageActivityInput extends Record { + type?: "message"; + text?: string; + } + + export class MessageActivityInput implements IMessageActivityInput { + constructor(text?: string, value?: Record); + static from(activity: IMessageActivityInput): MessageActivityInput; + prependQuote(messageId: string): this; + } + /** Teams API client subset used for conversation activity sends. */ export class Client { constructor( diff --git a/test/scripts/check-deadcode-unused-files.test.ts b/test/scripts/check-deadcode-unused-files.test.ts index 5b82318edd93..bd95ed4786af 100644 --- a/test/scripts/check-deadcode-unused-files.test.ts +++ b/test/scripts/check-deadcode-unused-files.test.ts @@ -37,6 +37,21 @@ function finishFakeProcess( child.emit("close", status, signal); } +function waitForPidFileSync(filePath: string, timeoutMs: number): number { + const deadlineAt = Date.now() + timeoutMs; + const waitSignal = new Int32Array(new SharedArrayBuffer(4)); + while (Date.now() < deadlineAt) { + if (existsSync(filePath)) { + const pid = Number.parseInt(readFileSync(filePath, "utf8"), 10); + if (Number.isInteger(pid) && pid > 0) { + return pid; + } + } + Atomics.wait(waitSignal, 0, 0, 5); + } + throw new Error(`timeout waiting for pid in ${filePath}`); +} + describe("check-deadcode-unused-files", () => { it("has no checked-in unused-file allowlist", () => { expect(existsSync(path.resolve("scripts/deadcode-unused-files.allowlist.mjs"))).toBe(false); @@ -160,7 +175,7 @@ Delete the files or model their real entrypoints in Knip.`, "--config.minimum-release-age=0", "dlx", "--package", - "knip@6.8.0", + "knip@6.32.2", "knip", "--config", "config/knip.config.ts", @@ -215,7 +230,7 @@ Delete the files or model their real entrypoints in Knip.`, "--config.minimum-release-age=0", "dlx", "--package", - "knip@6.8.0", + "knip@6.32.2", "knip", "--config", "config/knip.config.ts", @@ -300,16 +315,17 @@ Delete the files or model their real entrypoints in Knip.`, env: { ...process.env, OPENCLAW_TEST_CHILD_PID: childPidPath }, killGraceMs: 50, spawnCommand(_command: string, _args: string[], options: unknown) { - return spawn(process.execPath, ["-e", parentScript], { + const parent = spawn(process.execPath, ["-e", parentScript], { ...(options as Parameters[2]), env: { ...process.env, OPENCLAW_TEST_CHILD_PID: childPidPath }, }); + childPid = waitForPidFileSync(childPidPath, 2_000); + return parent; }, timeoutMs: 100, writeStatus: () => {}, }); - childPid = await waitForPidFile(childPidPath, 2_000); expect(isProcessAlive(childPid)).toBe(true); await expect(resultPromise).resolves.toMatchObject({ diff --git a/test/scripts/check-workflows.test.ts b/test/scripts/check-workflows.test.ts index cbe5a5450d64..0721b7d4ab98 100644 --- a/test/scripts/check-workflows.test.ts +++ b/test/scripts/check-workflows.test.ts @@ -122,7 +122,7 @@ describe("check-workflows", () => { expect(result.status).toBe(0); const pythonArgs = readFileSync(markerPath, "utf8"); - expect(pythonArgs).toContain("-m pip install --disable-pip-version-check pre-commit==4.2.0"); + expect(pythonArgs).toContain("-m pip install --disable-pip-version-check pre-commit==4.6.2"); expect(pythonArgs).toContain( "-m pre_commit run --config .pre-commit-config.yaml actionlint --files", ); @@ -163,7 +163,7 @@ describe("check-workflows", () => { expect(result.status).toBe(1); expect(result.stderr).toContain("python venv unavailable"); expect(result.stderr).toContain("missing pre-commit runtime for actionlint"); - expect(result.stderr).toContain("Python venv support for pre-commit 4.2.0"); + expect(result.stderr).toContain("Python venv support for pre-commit 4.6.2"); }); it("cleans the temporary Python venv before exiting on hook failure", () => { diff --git a/test/scripts/ci-workflow-guards.test.ts b/test/scripts/ci-workflow-guards.test.ts index 2ff393aedf6c..c747b0ba4d04 100644 --- a/test/scripts/ci-workflow-guards.test.ts +++ b/test/scripts/ci-workflow-guards.test.ts @@ -23,11 +23,11 @@ import { NATIVE_I18N_LOCALES } from "../../scripts/native-i18n-locales.ts"; import { SUPPORTED_LOCALES } from "../../ui/src/i18n/lib/registry.ts"; import { useAutoCleanupTempDirTracker } from "../helpers/temp-dir.js"; -const CHECKOUT_V6 = "actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10"; -const CACHE_V5 = "actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae"; -const CACHE_SAVE_V5 = "actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae"; +const CHECKOUT_V6 = "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1"; +const CACHE_V5 = "actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9"; +const CACHE_SAVE_V5 = "actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9"; const SETUP_GRADLE_V6 = "gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb"; -const SETUP_GO_V6 = "actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c"; +const SETUP_GO_V6 = "actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e"; const UPLOAD_ARTIFACT_V7 = "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a"; const DOWNLOAD_ARTIFACT_V8 = "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c"; const CREATE_GITHUB_APP_TOKEN_V3 = @@ -38,7 +38,7 @@ const MANTIS_MANUAL_ONLY_WORKFLOWS = [ ".github/workflows/mantis-discord-thread-attachment.yml", ".github/workflows/mantis-telegram-live.yml", ] as const; -const TRUFFLEHOG_V3_95_9 = "trufflesecurity/trufflehog@27b0417c16317ca9a472a9a8092acce143b49c55"; +const TRUFFLEHOG_V3_95_9 = "trufflesecurity/trufflehog@bcfcf73aaf4759d4dadc2783177c245a02792318"; const MANTIS_GITHUB_APP_CLIENT_ID = "Iv23liPJCozR0uHm6P7G"; const OPENGREP_PR_DIFF_WORKFLOW = ".github/workflows/opengrep-precise.yml"; const OPENGREP_FULL_WORKFLOW = ".github/workflows/opengrep-precise-full.yml"; @@ -2758,9 +2758,9 @@ NODE const run = expectDefined(installStep.run, `Install opengrep script in ${workflowPath}`); expect(installStep.env, workflowPath).toMatchObject({ - OPENGREP_VERSION: "v1.25.0", + OPENGREP_VERSION: "v1.27.1", OPENGREP_LINUX_X64_SHA256: - "9ac4aebb47ba3f7b0d8fc641ac8749cb6c2f253f616131a67d9631e00d4bea33", + "58053da76672bbeb5b0a5441021c58338707052e10f81d777140ca879bd491ce", }); expect(run, workflowPath).toContain('binary="$(mktemp "${RUNNER_TEMP}/opengrep.XXXXXX")"'); expect(run, workflowPath).toContain("trap 'rm -f \"$binary\"' EXIT"); @@ -2994,7 +2994,7 @@ NODE "Android SDK package install step", ); - expect(javaStep.uses).toBe("actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287"); + expect(javaStep.uses).toBe("actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961"); expect(javaStep.with).toMatchObject({ distribution: "temurin", "java-version": 17, @@ -3086,6 +3086,35 @@ NODE } }); + it("pins Swift 6.3 workflow jobs to Xcode 26.6-capable runners", () => { + const codeql = parse( + readFileSync(".github/workflows/codeql-macos-critical-security.yml", "utf8"), + ); + const codeqlJob = codeql.jobs.macos; + const codeqlSelect = expectDefined( + codeqlJob.steps.find((step: WorkflowStep) => step.name === "Select Xcode"), + "CodeQL macOS Xcode selection", + ); + + expect(codeqlJob["runs-on"]).toBe("blacksmith-12vcpu-macos-26"); + expect(codeqlSelect.run).toContain("/Applications/Xcode_26.6.app/Contents/Developer"); + expect(codeqlSelect.run).toContain('if [[ "$xcode_version" != 26.6* ]]; then'); + + for (const [workflowPath, selectorCount] of [ + [".github/workflows/ci.yml", 1], + [".github/workflows/ios-periphery.yml", 1], + [".github/workflows/macos-periphery.yml", 1], + [".github/workflows/shared-openclawkit-periphery.yml", 2], + ] as const) { + const source = readFileSync(workflowPath, "utf8"); + expect(source.match(/\/Applications\/Xcode_26\.6\.app/gu), workflowPath).toHaveLength( + selectorCount, + ); + expect(source.match(/expected Xcode 26\.6/gu), workflowPath).toHaveLength(selectorCount); + expect(source, workflowPath).not.toContain("Xcode_26.5.app"); + } + }); + it("loads Android CI setup from the workflow revision for frozen targets", () => { const steps = readCiWorkflow().jobs.android.steps as WorkflowStep[]; const checkoutIndex = steps.findIndex((step) => step.name === "Checkout"); @@ -3108,6 +3137,10 @@ NODE it("bounds Android SDK command-line tools downloads", () => { const action = readAndroidToolchainAction(); + const restoreStep = expectDefined( + action.runs.steps.find((step: WorkflowStep) => step.name === "Restore Android SDK cache"), + "Android SDK cache restore step", + ); const setupStep = expectDefined( action.runs.steps.find((step: WorkflowStep) => step.run?.includes("commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip"), @@ -3115,7 +3148,18 @@ NODE "Android SDK setup step", ); + expect(restoreStep.with?.key).toBe( + "${{ runner.os }}-android-sdk-v1-cmdline-15859902-platform-37.0-build-tools-36.0.0", + ); + expect(String(restoreStep.with?.["restore-keys"]).trim()).toBe( + "${{ runner.os }}-android-sdk-v1-cmdline-15859902-", + ); + expect(setupStep.run).toContain('CMDLINE_TOOLS_VERSION="15859902"'); + expect(setupStep.run).toContain( + 'CMDLINE_TOOLS_SHA256="4e4c464f145a7512b57d088ac6c278c03c9eea610886b35a5e0804e74eedf583"', + ); expect(setupStep.run).toContain("curl -fsSL --connect-timeout 10 --max-time 300"); + expect(setupStep.run).toContain("sha256sum --check -"); }); it("covers Android app variants, lint, and benchmark compilation", () => { @@ -3567,7 +3611,7 @@ NODE expect(scanStep.with).toEqual({ base: "${{ steps.diff_base.outputs.sha }}", head: "${{ github.sha }}", - version: "3.95.9@sha256:59b244249d1a1aef4baa24fe73d3c931616264482580d806d77f6c74d26b3e42", + version: "3.97.0@sha256:ff4c95e9df7d645daf2140e3ca1039031c63106268d5fbb25feb43ceca1bcc33", extra_args: "--results=verified,unknown --fail-on-scan-errors", }); }); @@ -3868,13 +3912,14 @@ NODE ).toBe("false"); } } - for (const { jobName, step: setup } of Object.entries(workflow.jobs).flatMap(([jobName, job]) => - ((job as { steps?: WorkflowStep[] }).steps ?? []) - .filter((candidate) => candidate.uses?.endsWith("/.github/actions/setup-node-env")) - .map((candidate) => ({ jobName, step: candidate })), + for (const { jobName: setupJobName, step: setup } of Object.entries(workflow.jobs).flatMap( + ([jobName, job]) => + ((job as { steps?: WorkflowStep[] }).steps ?? []) + .filter((candidate) => candidate.uses?.endsWith("/.github/actions/setup-node-env")) + .map((candidate) => ({ jobName, step: candidate })), )) { - expect(setup.with, jobName).not.toHaveProperty("sticky-disk"); - expect(setup.with, jobName).not.toHaveProperty("save-sticky-disk"); + expect(setup.with, setupJobName).not.toHaveProperty("sticky-disk"); + expect(setup.with, setupJobName).not.toHaveProperty("save-sticky-disk"); expect( [ "off", @@ -3883,7 +3928,7 @@ NODE "${{ needs.preflight.outputs.cache_mode }}", "${{ steps.candidate_trust.outputs.cache_mode }}", ], - jobName, + setupJobName, ).toContain(setup.with?.["cache-mode"]); } @@ -3892,7 +3937,7 @@ NODE (candidate: WorkflowStep) => candidate.name === "Save exact dependency cache", ); expect(dependencySave).toMatchObject({ - uses: "actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae", + uses: "actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9", with: { key: "${{ steps.setup-node-env.outputs.dependency-cache-key }}", path: cachePaths, @@ -4111,7 +4156,7 @@ server.listen(0, "127.0.0.1", () => writeFileSync(readyPath, String(server.addre (step: WorkflowStep) => step.name === "Save build-all cache", ); expect(buildSave).toMatchObject({ - uses: "actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae", + uses: "actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9", with: { key: "${{ steps.setup-node-env.outputs.build-all-cache-key }}", path: ".artifacts/build-all-cache", @@ -7427,7 +7472,7 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" expect(stepNames).not.toContain("Save dist build cache"); expect(restoreStep.uses).toBe(CACHE_V5); expect(buildDistStep.if).toBe("steps.dist_build_cache.outputs.cache-hit != 'true'"); - expect(saveStep.uses).toBe("actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae"); + expect(saveStep.uses).toBe("actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9"); expect(saveStep.if).toContain("steps.setup-node-env.outputs.cache-mode == 'read-write'"); expect(saveStep.with?.key).toBe("${{ runner.os }}-dist-build-v3-${{ github.sha }}"); expect(restoreStep.with.path).toContain("dist/"); @@ -7541,7 +7586,7 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" uses: SETUP_GO_V6, with: { cache: false, - "go-version": "1.25.12", + "go-version": "1.26.6", }, }); expect(setupGoStep.with).not.toHaveProperty("go-version-file"); @@ -7564,12 +7609,12 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}" }); expect(verifyGoStep).toMatchObject({ if: "matrix.requires_go == true", - run: 'test "$(go env GOVERSION)" = "go1.25.12"', + run: 'test "$(go env GOVERSION)" = "go1.26.6"', }); const goMod = readTrackedText("scripts/docs-i18n/go.mod"); - expect(goMod).toMatch(/^go 1\.25\.0$/mu); - expect(goMod).toMatch(/^toolchain go1\.25\.12$/mu); + expect(goMod).toMatch(/^go 1\.26\.0$/mu); + expect(goMod).toMatch(/^toolchain go1\.26\.6$/mu); }); it("fails and retries quiet Node test shard stalls quickly", () => { diff --git a/test/scripts/crabbox-wrapper.test.ts b/test/scripts/crabbox-wrapper.test.ts index 797927eadd67..72c7b1a172f0 100644 --- a/test/scripts/crabbox-wrapper.test.ts +++ b/test/scripts/crabbox-wrapper.test.ts @@ -22,8 +22,7 @@ import { isProviderAdvertised, parseProvidersFromHelp, } from "../../scripts/crabbox-wrapper-providers.mts"; -import { makeTempDir } from "../helpers/temp-dir.js"; -import { useAutoCleanupTempDirTracker } from "../helpers/temp-dir.js"; +import { makeTempDir, useAutoCleanupTempDirTracker } from "../helpers/temp-dir.js"; const tempDirs: string[] = []; const invocationLogTempDirs = useAutoCleanupTempDirTracker(afterEach); @@ -729,7 +728,7 @@ function expectMacosPackageCommand( expect(output.args).toContain("--shell"); expect(remoteCommand).toContain("openclaw_crabbox_bootstrap_macos_js"); expect(remoteCommand).toContain("pnpm --version >&2"); - expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_62"); + expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_63"); beforeGrouped?.(remoteCommand); expectGroupedShellCommand(remoteCommand, command); } @@ -2295,7 +2294,7 @@ describe("scripts/crabbox-wrapper", () => { expectGroupedShellCommand(remoteCommand, "node --version"); }); - it("preflights Swift 6.2 for raw AWS macOS Swift app builds", () => { + it("preflights Swift 6.3 for raw AWS macOS Swift app builds", () => { const { output, remoteCommand } = runSuccessfulMacosCommand([ "swift", "build", @@ -2305,13 +2304,14 @@ describe("scripts/crabbox-wrapper", () => { "OpenClaw", ]); expect(output.args).toContain("--shell"); - expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_62"); - expect(remoteCommand).toContain("/Applications/Xcode_26.1.app"); + expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_63"); + expect(remoteCommand).toContain("/Applications/Xcode_26*.app"); expect(remoteCommand).toContain("/Applications/Xcode-26*.app"); + expect(remoteCommand).toContain("/Applications/Xcode_2[7-9]*.app"); expect(remoteCommand).toContain('sudo xcode-select -s "$openclaw_developer"'); - expect(remoteCommand).toContain("OpenClaw macOS app proof requires Swift tools 6.2+"); + expect(remoteCommand).toContain("OpenClaw macOS app proof requires Swift tools 6.3+"); expect(remoteCommand).toContain("xcodebuild -version"); - expect(remoteCommand).toContain("OpenClaw macOS app proof requires Xcode 26.x"); + expect(remoteCommand).toContain("OpenClaw macOS app proof requires Xcode 26.4+"); expect(remoteCommand).not.toContain("openclaw_crabbox_bootstrap_macos_js"); expectGroupedShellCommand( remoteCommand, @@ -2324,8 +2324,8 @@ describe("scripts/crabbox-wrapper", () => { runSuccessfulMacosCommand(["pnpm", "mac:package"]), "pnpm mac:package", (remoteCommand) => { - expect(remoteCommand).toContain("OpenClaw macOS app proof requires Swift tools 6.2+"); - expect(remoteCommand).toContain("OpenClaw macOS app proof requires Xcode 26.x"); + expect(remoteCommand).toContain("OpenClaw macOS app proof requires Swift tools 6.3+"); + expect(remoteCommand).toContain("OpenClaw macOS app proof requires Xcode 26.4+"); }, ); }); @@ -2339,7 +2339,7 @@ describe("scripts/crabbox-wrapper", () => { ]); expect(output.args).toContain("--shell"); expect(remoteCommand).toContain("openclaw_crabbox_bootstrap_macos_js"); - expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_62"); + expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_63"); expectGroupedShellCommand(remoteCommand, "openclaw_crabbox_env -i pnpm mac:package"); }); @@ -2376,7 +2376,7 @@ describe("scripts/crabbox-wrapper", () => { ...args, ]); expect(remoteCommand).not.toContain("openclaw_crabbox_bootstrap_macos_js"); - expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_62"); + expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_63"); } }); @@ -2519,7 +2519,7 @@ describe("scripts/crabbox-wrapper", () => { ])("$name", ({ js = true, script }) => { const { output, remoteCommand } = runSuccessfulMacosCommand(["bash", script]); expect(output.args).toContain("--shell"); - expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_62"); + expect(remoteCommand).toContain("openclaw_crabbox_require_macos_swift_63"); if (js) { expect(remoteCommand).toContain("openclaw_crabbox_bootstrap_macos_js"); expect(remoteCommand).toContain("pnpm --version >&2"); @@ -2534,7 +2534,7 @@ describe("scripts/crabbox-wrapper", () => { "echo", "scripts/package-mac-app.sh", ]); - expect(remoteCommand).not.toContain("openclaw_crabbox_require_macos_swift_62"); + expect(remoteCommand).not.toContain("openclaw_crabbox_require_macos_swift_63"); expect(output.args).toEqual([ "run", "--provider", @@ -2842,10 +2842,10 @@ describe("scripts/crabbox-wrapper", () => { ].join("\n"); const { output } = runSuccessfulMacosScript(script); expect(output.scriptContent).toContain("openclaw_crabbox_bootstrap_macos_js"); - expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_62"); - expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_62 || exit $?"); - expect(output.scriptContent).toContain("OpenClaw macOS app proof requires Swift tools 6.2+"); - expect(output.scriptContent).toContain("OpenClaw macOS app proof requires Xcode 26.x"); + expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_63"); + expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_63 || exit $?"); + expect(output.scriptContent).toContain("OpenClaw macOS app proof requires Swift tools 6.3+"); + expect(output.scriptContent).toContain("OpenClaw macOS app proof requires Xcode 26.4+"); expect(output.scriptContent).toContain(`\n${script}`); }); @@ -2854,8 +2854,8 @@ describe("scripts/crabbox-wrapper", () => { const { output } = runSuccessfulMacosScript(script); expect(output.scriptContent).toContain("openclaw_crabbox_bootstrap_macos_js"); expect(output.scriptContent).toContain("pnpm --version >&2"); - expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_62"); - expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_62 || exit $?"); + expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_63"); + expect(output.scriptContent).toContain("openclaw_crabbox_require_macos_swift_63 || exit $?"); expect(output.scriptContent).toContain(`\n${script}\n`); }); diff --git a/test/scripts/dependency-guard-workflow.test.ts b/test/scripts/dependency-guard-workflow.test.ts index 14186d51e770..d4afe0e3add1 100644 --- a/test/scripts/dependency-guard-workflow.test.ts +++ b/test/scripts/dependency-guard-workflow.test.ts @@ -100,7 +100,7 @@ describe("dependency guard workflow", () => { for (const [index, job] of jobs.entries()) { const steps = job?.steps ?? []; const checkoutStep = workflowStep(steps, 0, `dependency guard checkout step ${index}`); - expect(checkoutStep.uses).toBe("actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd"); + expect(checkoutStep.uses).toBe("actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1"); expect(checkoutStep.with?.ref).toBe("${{ github.event.pull_request.base.sha }}"); expect(checkoutStep.with?.["persist-credentials"]).toBe(false); expect(steps.at(-1)?.run).toBe("node scripts/github/dependency-guard.mjs"); @@ -171,7 +171,7 @@ describe("dependency guard workflow", () => { expect(steps).toHaveLength(2); const checkoutStep = workflowStep(steps, 0, "final dependency guard checkout step"); const runStep = workflowStep(steps, 1, "final dependency guard run step"); - expect(checkoutStep.uses).toBe("actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd"); + expect(checkoutStep.uses).toBe("actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1"); expect(checkoutStep.with?.ref).toBe("${{ github.event.pull_request.base.sha }}"); expect(checkoutStep.with?.["persist-credentials"]).toBe(false); expect(runStep.run).toBe("node scripts/github/dependency-guard.mjs"); diff --git a/test/scripts/docker-build-helper.test.ts b/test/scripts/docker-build-helper.test.ts index 8dc7d3973a48..45b85b215941 100644 --- a/test/scripts/docker-build-helper.test.ts +++ b/test/scripts/docker-build-helper.test.ts @@ -620,12 +620,22 @@ print_log_tail "$LOG_PATH" expect(liveBuild).not.toContain('docker image inspect "$LIVE_IMAGE_NAME"'); expect(liveBuild).not.toContain('docker pull "$LIVE_IMAGE_NAME"'); expect(liveBuild).toContain("Live-test image not available; building"); - expect(readFileSync(OPENWEBUI_DOCKER_E2E_PATH, "utf8")).toContain( + const openWebUi = readFileSync(OPENWEBUI_DOCKER_E2E_PATH, "utf8"); + expect(openWebUi).toContain( + 'OPENWEBUI_IMAGE="${OPENWEBUI_IMAGE:-ghcr.io/open-webui/open-webui:v0.11.0@sha256:72c0ba641ba75e7aa52655cb242570906ececd09b1140fb736483038a22b3228}"', + ); + expect(openWebUi).toContain( 'DOCKER_COMMAND_TIMEOUT="$DOCKER_PULL_TIMEOUT" docker_e2e_docker_cmd pull "$OPENWEBUI_IMAGE"', ); - expect(readFileSync(OPENWEBUI_DOCKER_E2E_PATH, "utf8")).not.toContain( + expect(openWebUi).toContain( + "node scripts/e2e/lib/openwebui/http-probe.mjs 'http://$OW_NAME:$WEBUI_PORT/health' 200", + ); + expect(openWebUi).not.toContain( 'timeout "$DOCKER_PULL_TIMEOUT" docker pull "$OPENWEBUI_IMAGE"', ); + expect(openWebUi).not.toContain( + "node scripts/e2e/lib/openwebui/http-probe.mjs 'http://$OW_NAME:$WEBUI_PORT/' lt500", + ); expect(liveCliBackend).toContain( 'OPENCLAW_LIVE_DOCKER_REPO_ROOT="$ROOT_DIR" "$TRUSTED_HARNESS_DIR/scripts/test-live-build-docker.sh"', ); @@ -4496,6 +4506,7 @@ source "$ROOT_DIR/scripts/lib/docker-e2e-logs.sh" expectTextToIncludeAll(packageRunner, [ "npm install -g --prefix /tmp/openclaw-proof", + "corepack prepare pnpm@11.22.0 --activate", "pnpm add --global --allow-build=openclaw", "bun@1.3.14", 'test "$(command -v openclaw)" = "/tmp/openclaw-proof/bin/openclaw"', @@ -4517,7 +4528,7 @@ source "$ROOT_DIR/scripts/lib/docker-e2e-logs.sh" "bash /tmp/openclaw-source/scripts/install-cli.sh", "--install-method git", "--prefix /tmp/openclaw-prefix", - "--node-version 24.15.0", + "--node-version 24.19.0", "apt-get install -y --no-install-recommends curl", "command -v curl >/dev/null", 'chmod 0555 "$SOURCE_PROOF_SCRIPT"', diff --git a/test/scripts/install-cli.test.ts b/test/scripts/install-cli.test.ts index 16b6bad38768..30afc8dfbaef 100644 --- a/test/scripts/install-cli.test.ts +++ b/test/scripts/install-cli.test.ts @@ -472,7 +472,7 @@ describe("install-cli.sh", () => { `); expect(result.status).toBe(0); - expect(result.stdout).toContain("selected=22.22.3"); + expect(result.stdout).toContain("selected=22.23.2"); expect(script).toContain('armv7|armv7l) echo "armv7l"'); }); @@ -491,10 +491,10 @@ describe("install-cli.sh", () => { `); expect(result.status).toBe(17); - expect(result.stdout).toContain("selected=22.22.3"); + expect(result.stdout).toContain("selected=22.23.2"); expect(result.stdout).toContain("first-path="); - expect(result.stdout).toContain("/tools/node-v22.22.3/bin"); - expect(result.stdout).not.toContain("/tools/node-v24.15.0/bin"); + expect(result.stdout).toContain("/tools/node-v22.23.2/bin"); + expect(result.stdout).not.toContain("/tools/node-v24.19.0/bin"); }); it("fails early for unavailable Node 24 Linux ARMv7 downloads", () => { @@ -772,7 +772,7 @@ describe("install-cli.sh", () => { const home = join(tmp, "home"); const prefixInput = input === "literal tilde" ? "~/openclaw-local" : "openclaw-local"; const prefix = join(input === "literal tilde" ? home : installRoot, "openclaw-local"); - const nodeDir = join(prefix, "tools", "node-v24.15.0"); + const nodeDir = join(prefix, "tools", "node-v24.19.0"); const repoInput = input === "literal tilde" ? "~/openclaw-source" : "openclaw-source"; const repo = join(input === "literal tilde" ? home : installRoot, "openclaw-source"); mkdirSync(installRoot, { recursive: true }); @@ -782,7 +782,7 @@ describe("install-cli.sh", () => { mkdirSync(join(repo, "dist"), { recursive: true }); mkdirSync(otherRoot, { recursive: true }); symlinkSync(process.execPath, join(nodeDir, "bin", "node")); - symlinkSync("node-v24.15.0", join(prefix, "tools", "node")); + symlinkSync("node-v24.19.0", join(prefix, "tools", "node")); writeFileSync( join(nodeDir, "bin", "npm"), '#!/bin/bash\nif [[ "$1" == "--version" ]]; then printf "11.15.0\\n"; elif [[ "$1" == "config" ]]; then printf "null\\n"; fi\n', @@ -1030,8 +1030,8 @@ describe("install-cli.sh", () => { expect(result.status).toBe(0); expect(result.stdout).not.toContain("Installing Node via apk"); expect(() => readFileSync(apkLog, "utf8")).toThrow(); - const nodeLink = join(prefix, "tools", "node-v24.15.0", "bin", "node"); - const npmLink = join(prefix, "tools", "node-v24.15.0", "bin", "npm"); + const nodeLink = join(prefix, "tools", "node-v24.19.0", "bin", "node"); + const npmLink = join(prefix, "tools", "node-v24.19.0", "bin", "npm"); expect(lstatSync(nodeLink).isSymbolicLink()).toBe(true); expect(readlinkSync(nodeLink)).toBe(fakeNode); expect(readlinkSync(npmLink)).toBe(fakeNpm); @@ -1297,8 +1297,8 @@ describe("install-cli.sh", () => { ); expect(result.status).toBe(0); - const nodeLink = join(prefix, "tools", "node-v24.15.0", "bin", "node"); - const npmLink = join(prefix, "tools", "node-v24.15.0", "bin", "npm"); + const nodeLink = join(prefix, "tools", "node-v24.19.0", "bin", "node"); + const npmLink = join(prefix, "tools", "node-v24.19.0", "bin", "npm"); expect(readFileSync(badNpmLog, "utf8")).toBe("--version\n"); expect(readFileSync(goodNpmLog, "utf8")).toBe("--version\n"); expect(readFileSync(goodNodeLog, "utf8")).toContain("npm --version"); @@ -2017,11 +2017,11 @@ describe("install-cli.sh", () => { const tmp = mkdtempSync(join(tmpdir(), "openclaw-install-cli-freshness-")); const prefix = join(tmp, "prefix"); const home = join(tmp, "home"); - const nodeBin = join(prefix, "tools/node-v24.15.0/bin"); + const nodeBin = join(prefix, "tools/node-v24.19.0/bin"); const argsLog = join(tmp, "npm-args.log"); mkdirSync(nodeBin, { recursive: true }); mkdirSync(home, { recursive: true }); - writeInstalledOpenClawEntry(join(prefix, "tools", "node-v24.15.0")); + writeInstalledOpenClawEntry(join(prefix, "tools", "node-v24.19.0")); writeFileSync(join(home, ".npmrc"), "min-release-age=7\n"); writeNpmFreshnessConflictFixture(join(nodeBin, "npm"), argsLog); @@ -2054,12 +2054,12 @@ describe("install-cli.sh", () => { const prefix = join(tmp, "prefix"); const home = join(tmp, "home"); const project = join(tmp, "project"); - const nodeBin = join(prefix, "tools/node-v24.15.0/bin"); + const nodeBin = join(prefix, "tools/node-v24.19.0/bin"); const argsLog = join(tmp, "npm-args.log"); mkdirSync(nodeBin, { recursive: true }); mkdirSync(home, { recursive: true }); mkdirSync(project, { recursive: true }); - writeInstalledOpenClawEntry(join(prefix, "tools", "node-v24.15.0")); + writeInstalledOpenClawEntry(join(prefix, "tools", "node-v24.19.0")); writeFileSync(join(home, ".npmrc"), "before=2026-01-01T00:00:00.000Z\n"); writeFileSync(join(project, ".npmrc"), "min-release-age=7\n"); writeNpmBeforePolicyFixture(join(nodeBin, "npm"), argsLog); diff --git a/test/scripts/install-trufflehog.test.ts b/test/scripts/install-trufflehog.test.ts index 3f8e73f84a7a..51e5bba1df57 100644 --- a/test/scripts/install-trufflehog.test.ts +++ b/test/scripts/install-trufflehog.test.ts @@ -53,10 +53,10 @@ describe("scripts/install-trufflehog.sh", () => { ); expect(output).toContain( - "amd64=f6d1106b85107d79527ed7a5b98b592beadd8b770dc3c9e8c1ad99e1b2cf127e", + "amd64=62224de2f9dd7cd418800feb953760a302ed2f82a7c547fe1146a4874fb179e4", ); expect(output).toContain( - "arm64=9d9c2ec4ea36a089a9c5aaafe1969d176013ddf9f44d68e8cd75291aed8c83ed", + "arm64=f48f57e3d4343377865b1b64653f96d381d61a7792d89d026e85524732039fde", ); }); @@ -66,7 +66,7 @@ describe("scripts/install-trufflehog.sh", () => { const downloadMarker = join(root, "downloaded"); mkdirSync(binDir); const trufflehog = join(binDir, "trufflehog"); - writeFileSync(trufflehog, "#!/bin/sh\nprintf 'trufflehog 3.95.9\\n'\n"); + writeFileSync(trufflehog, "#!/bin/sh\nprintf 'trufflehog 3.97.0\\n'\n"); chmodSync(trufflehog, 0o755); const fakeCurl = join(binDir, "curl"); writeFileSync( @@ -87,7 +87,7 @@ describe("scripts/install-trufflehog.sh", () => { }); expect(existsSync(downloadMarker)).toBe(false); - expect(readFileSync(trufflehog, "utf8")).toContain("3.95.9"); + expect(readFileSync(trufflehog, "utf8")).toContain("3.97.0"); }); it("creates a missing user-writable install directory without sudo", () => { @@ -153,7 +153,7 @@ describe("scripts/install-trufflehog.sh", () => { ), ).toThrow(); - const archive = "trufflehog_3.95.9_linux_amd64.tar.gz"; + const archive = "trufflehog_3.97.0_linux_amd64.tar.gz"; const args = readFileSync(argsFile, "utf8").trimEnd().split("\n"); const outputPath = args[10] ?? ""; expect(args.slice(0, 10)).toEqual([ @@ -170,7 +170,7 @@ describe("scripts/install-trufflehog.sh", () => { ]); expect(outputPath).toBe(join(dirname(outputPath), archive)); expect(args[11]).toBe( - `https://github.com/trufflesecurity/trufflehog/releases/download/v3.95.9/${archive}`, + `https://github.com/trufflesecurity/trufflehog/releases/download/v3.97.0/${archive}`, ); expect(existsSync(dirname(outputPath))).toBe(false); }); diff --git a/test/scripts/openclaw-performance-workflow.test.ts b/test/scripts/openclaw-performance-workflow.test.ts index dc66077c4475..ac5d0965741a 100644 --- a/test/scripts/openclaw-performance-workflow.test.ts +++ b/test/scripts/openclaw-performance-workflow.test.ts @@ -127,8 +127,8 @@ describe("OpenClaw performance workflow", () => { it("pins the Kova evaluator with release validation contracts", () => { const workflow = readFileSync(WORKFLOW, "utf8"); - const canonicalKovaRef = "0f9e678e239b45db46d2bd930b7983203580df78"; - const legacyKovaRef = "0f9e678e239b45db46d2bd930b7983203580df78"; + const canonicalKovaRef = "dfafaff9dcd49b9c76788c6260f1f72dd2ced593"; + const legacyKovaRef = "dfafaff9dcd49b9c76788c6260f1f72dd2ced593"; const install = findStep("Install OCM and Kova"); const installRun = install.run ?? ""; const targetCheckout = findStep("Checkout target metadata", "resolve_target"); @@ -457,7 +457,7 @@ describe("OpenClaw performance workflow", () => { expect(workflow.jobs?.kova?.needs).toBe("resolve_target"); expect(workflow.jobs?.source_performance?.needs).toBe("resolve_target"); - expect(targetCheckout.uses).toBe("actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10"); + expect(targetCheckout.uses).toBe("actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1"); expect(targetCheckout.with?.ref).toBe("${{ inputs.target_ref || github.sha }}"); expect(targetCheckout.with?.path).toBe(".artifacts/performance-target"); expect(targetCheckout.with?.["sparse-checkout-cone-mode"]).toBe(false); diff --git a/test/scripts/package-acceptance-workflow.test.ts b/test/scripts/package-acceptance-workflow.test.ts index f41c5a33422f..c6c5dbcc6d3a 100644 --- a/test/scripts/package-acceptance-workflow.test.ts +++ b/test/scripts/package-acceptance-workflow.test.ts @@ -119,7 +119,7 @@ const RELEASE_FILTER_VALIDATOR = "scripts/github/validate-release-suite-filters. const VERIFY_PROVIDER_SECRETS_SCRIPT = ".agents/skills/release-openclaw-ci/scripts/verify-provider-secrets.mjs"; const UPGRADE_SURVIVOR_RUN_SCRIPT = "scripts/e2e/lib/upgrade-survivor/run.sh"; -const SETUP_NODE_V6 = "actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e"; +const SETUP_NODE_V6 = "actions/setup-node@820762786026740c76f36085b0efc47a31fe5020"; const DOWNLOAD_ARTIFACT_V8 = "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c"; const UPLOAD_ARTIFACT_V7 = "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a"; const tempDirs = useAutoCleanupTempDirTracker(afterEach); @@ -4936,7 +4936,7 @@ describe("package artifact reuse", () => { expect(trustedCheckout).toMatchObject({ if: eligibilityCondition, - uses: "actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10", + uses: "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1", with: { "persist-credentials": false, ref: "${{ github.workflow_sha }}", @@ -6674,7 +6674,7 @@ describe("package artifact reuse", () => { expect(androidWorkflow).toContain('--artifact", "third-party'); expect(androidWorkflow).toContain("OpenClaw-Android.apk"); expect(androidWorkflow).toContain("OpenClaw-Android-SHA256SUMS.txt"); - expect(androidWorkflow).toContain("actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6"); + expect(androidWorkflow).toContain("actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6"); expect(androidWorkflow).toContain("--signer-workflow"); expect(androidWorkflow).toContain('--source-ref "refs/tags/${RELEASE_TAG}"'); expect(androidWorkflow).toContain("--deny-self-hosted-runners"); @@ -6901,7 +6901,7 @@ describe("package artifact reuse", () => { "approve_plugins_clawhub_release", ]); expect(clawHubPublish.uses).toBe( - "openclaw/clawhub/.github/workflows/package-publish.yml@d8096dfc039e86ab942ddf9ef117d04849fd84c1", + "openclaw/clawhub/.github/workflows/package-publish.yml@87ca030c30f3cfb78ab15c8e66b5ff1469c8f9c8", ); expect(clawHubPublish.permissions).toMatchObject({ actions: "read", @@ -7145,7 +7145,7 @@ wait_for_run plugin-clawhub-new.yml 123 "${expectedSha}" || status=$? for (const workflowPath of releaseWorkflowPaths) { const workflow = readWorkflow(workflowPath); - expect(workflow.env?.NODE_VERSION, workflowPath).toBe("24.16.0"); + expect(workflow.env?.NODE_VERSION, workflowPath).toBe("24.19.0"); expect(workflow.env?.PNPM_VERSION, workflowPath).toBeUndefined(); } diff --git a/test/scripts/package-mac-app.test.ts b/test/scripts/package-mac-app.test.ts index 0d20d0d21258..ad683eb6d3de 100644 --- a/test/scripts/package-mac-app.test.ts +++ b/test/scripts/package-mac-app.test.ts @@ -73,6 +73,7 @@ function runSwiftToolchainHarness(options: { swiftVersion: string; selectedDeveloperDir: "command-line-tools" | "custom-xcode" | "invalid" | "xcode"; developerDirOverride?: "custom-xcode" | "invalid" | "xcode"; + xcodeVersion?: string; xcodebuildFailure?: string; }) { const root = tempDirs.make("openclaw-package-swift-root-"); @@ -101,7 +102,7 @@ function runSwiftToolchainHarness(options: { '[[ "$*" == "-version" ]] || exit 2', ...(options.xcodebuildFailure ? [`printf '%s\\n' ${JSON.stringify(options.xcodebuildFailure)} >&2`, "exit 1"] - : ["echo 'Xcode 26.0'"]), + : [`echo ${JSON.stringify(`Xcode ${options.xcodeVersion ?? "26.4"}`)}`]), "", ].join("\n"), "utf8", @@ -1252,13 +1253,13 @@ describe("package-mac-app plist stamping", () => { }); expect(result.status).toBe(1); - expect(result.stderr).toContain("OpenClaw macOS app packaging requires Swift tools 6.2+"); + expect(result.stderr).toContain("OpenClaw macOS app packaging requires Swift tools 6.3+"); expect(result.stderr).toContain("Current Swift is 6.0"); }); - it("rejects Command Line Tools even when they provide Swift 6.2", () => { + it("rejects Command Line Tools even when they provide Swift 6.3", () => { const result = runSwiftToolchainHarness({ - swiftVersion: "6.2.1", + swiftVersion: "6.3.1", selectedDeveloperDir: "command-line-tools", }); @@ -1273,9 +1274,9 @@ describe("package-mac-app plist stamping", () => { expect(result.stderr).toContain("DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer"); }); - it("accepts Swift 6.2 from a selected full Xcode developer directory", () => { + it("accepts Swift 6.3 from a selected full Xcode developer directory", () => { const result = runSwiftToolchainHarness({ - swiftVersion: "6.2.1", + swiftVersion: "6.3.1", selectedDeveloperDir: "xcode", }); @@ -1283,9 +1284,32 @@ describe("package-mac-app plist stamping", () => { expect(result.stderr).toBe(""); }); + it("rejects Xcode 26.3 even when it exposes a Swift 6.3 binary", () => { + const result = runSwiftToolchainHarness({ + swiftVersion: "6.3.1", + selectedDeveloperDir: "xcode", + xcodeVersion: "26.3", + }); + + expect(result.status).toBe(1); + expect(result.stderr).toContain("OpenClaw macOS app packaging requires Xcode 26.4+"); + expect(result.stderr).toContain("current Xcode is 26.3"); + }); + + it("accepts newer major Xcode toolchains that satisfy the Swift floor", () => { + const result = runSwiftToolchainHarness({ + swiftVersion: "6.4.0", + selectedDeveloperDir: "xcode", + xcodeVersion: "27.0", + }); + + expect(result.status).toBe(0); + expect(result.stderr).toBe(""); + }); + it("honors DEVELOPER_DIR when the global selection is Command Line Tools", () => { const result = runSwiftToolchainHarness({ - swiftVersion: "6.2.1", + swiftVersion: "6.3.1", selectedDeveloperDir: "command-line-tools", developerDirOverride: "xcode", }); @@ -1296,7 +1320,7 @@ describe("package-mac-app plist stamping", () => { it("accepts usable full Xcode tooling from a custom developer directory", () => { const result = runSwiftToolchainHarness({ - swiftVersion: "6.2.1", + swiftVersion: "6.3.1", selectedDeveloperDir: "custom-xcode", }); @@ -1306,7 +1330,7 @@ describe("package-mac-app plist stamping", () => { it("rejects an unusable selected developer directory", () => { const result = runSwiftToolchainHarness({ - swiftVersion: "6.2.1", + swiftVersion: "6.3.1", selectedDeveloperDir: "invalid", }); @@ -1317,7 +1341,7 @@ describe("package-mac-app plist stamping", () => { it("preserves the native Xcode failure before generic selection guidance", () => { const diagnostic = "xcodebuild: error: SDK metadata is unavailable"; const result = runSwiftToolchainHarness({ - swiftVersion: "6.2.1", + swiftVersion: "6.3.1", selectedDeveloperDir: "xcode", xcodebuildFailure: diagnostic, }); @@ -1668,9 +1692,9 @@ describe("package-mac-app plist stamping", () => { ); expect(stageScript).toContain('manifest.dependencies["@trycua/cua-driver"]'); expect(stageScript).toContain('manifest.cuaDriverArtifacts["darwin-universal-binary"]'); - expect(cuaManifest.dependencies["@trycua/cua-driver"]).toBe("0.19.3"); + expect(cuaManifest.dependencies["@trycua/cua-driver"]).toBe("0.20.0"); expect(cuaManifest.cuaDriverArtifacts["darwin-universal-binary"]?.archiveSha256).toBe( - "733e28a3782ac8d325f8fce8b5d97486c1054af755b40dfd086151b34c79377e", + "07a88ea2c28a9ead66b2d9f6f93fab4b1189a1f7c704d2cd7b6d12c30eee9984", ); expect(packageScript).toContain( '"$ROOT_DIR/scripts/stage-cua-driver-macos.sh" "$APP_ROOT/Contents/Resources/cua-driver"', diff --git a/test/scripts/package-mac-dist.test.ts b/test/scripts/package-mac-dist.test.ts index 9b25211bd553..72c73e1019e2 100644 --- a/test/scripts/package-mac-dist.test.ts +++ b/test/scripts/package-mac-dist.test.ts @@ -159,7 +159,7 @@ describe("package-mac-dist plist validation", () => { [ "#!/usr/bin/env bash", '[[ "${1:-}" == "xcodebuild" && "${2:-}" == "-version" ]] || exit 2', - "echo 'Xcode 26.0'", + "echo 'Xcode 26.4'", "", ].join("\n"), "utf8", @@ -184,7 +184,7 @@ describe("package-mac-dist plist validation", () => { `); expect(result.status).toBe(1); - expect(result.stderr).toContain("OpenClaw macOS app packaging requires Swift tools 6.2+"); + expect(result.stderr).toContain("OpenClaw macOS app packaging requires Swift tools 6.3+"); expect(result.stderr).toContain("Current Swift is 6.0"); expect(result.stderr).not.toContain("node should not run before Swift preflight"); }); diff --git a/test/scripts/parallels-smoke-model.test.ts b/test/scripts/parallels-smoke-model.test.ts index 49bf82459c59..d72d7e1ec000 100644 --- a/test/scripts/parallels-smoke-model.test.ts +++ b/test/scripts/parallels-smoke-model.test.ts @@ -1379,8 +1379,8 @@ kill -TERM "$$"`, expect(combined).toContain("MinGit-"); expect(combined).toContain("portable-git"); expect(combined).toContain("where.exe git.exe"); - expect(windowsGit.indexOf('"MinGit-2.55.0.3-64-bit.zip"')).toBeLessThan( - windowsGit.indexOf('"MinGit-2.55.0.3-arm64.zip"'), + expect(windowsGit.indexOf('"MinGit-2.55.0.4-64-bit.zip"')).toBeLessThan( + windowsGit.indexOf('"MinGit-2.55.0.4-arm64.zip"'), ); expect( combined.match(/curl\.exe -fsSL --connect-timeout 10 --max-time 120 --retry 2/g), diff --git a/test/scripts/parallels-windows-git.test.ts b/test/scripts/parallels-windows-git.test.ts index 0003f6621b90..ea3aa98169a8 100644 --- a/test/scripts/parallels-windows-git.test.ts +++ b/test/scripts/parallels-windows-git.test.ts @@ -1,6 +1,9 @@ // Parallels Windows Git tests cover host-side MinGit preparation. +import { createHash } from "node:crypto"; +import { writeFileSync } from "node:fs"; import path from "node:path"; -import { describe, expect, it, vi } from "vitest"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import { useAutoCleanupTempDirTracker } from "../helpers/temp-dir.js"; const { runMock } = vi.hoisted(() => ({ runMock: vi.fn(), @@ -18,17 +21,47 @@ vi.mock("../../scripts/e2e/parallels/host-command.ts", async (importOriginal) => import { prepareMinGitZip } from "../../scripts/e2e/parallels/windows-git.ts"; +const tempDirs = useAutoCleanupTempDirTracker(afterEach); + +afterEach(() => { + runMock.mockReset(); +}); + +function mockMinGitDownload(params: { + assetName: string; + assetUrl: string; + expectedSha256: string; + payload: Buffer; +}): void { + runMock.mockImplementation((command: string, args: string[]) => { + if (command === "python3") { + return { + status: 0, + stderr: "", + stdout: `${params.assetName}\n${params.assetUrl}\nsha256:${params.expectedSha256}\n`, + }; + } + if (command === "curl") { + const outputIndex = args.indexOf("-o"); + const destination = args[outputIndex + 1]; + if (!destination) { + throw new Error("curl output path missing"); + } + writeFileSync(destination, params.payload); + } + return { status: 0, stderr: "", stdout: "" }; + }); +} + describe("Parallels Windows MinGit preparation", () => { - it("bounds the host asset download across connections, transfers, and retries", async () => { - const assetName = "MinGit-2.55.0.3-64-bit.zip"; + it("bounds and verifies the host asset download", async () => { + const assetName = "MinGit-2.55.0.4-64-bit.zip"; const assetUrl = `https://example.test/${assetName}`; - const targetDir = path.join("tmp", "windows-smoke"); + const targetDir = tempDirs.make("openclaw-windows-smoke-"); const targetPath = path.join(targetDir, assetName); - runMock.mockImplementation((command: string) => ({ - status: 0, - stderr: "", - stdout: command === "python3" ? `${assetName}\n${assetUrl}\n` : "", - })); + const payload = Buffer.from("verified MinGit archive"); + const expectedSha256 = createHash("sha256").update(payload).digest("hex"); + mockMinGitDownload({ assetName, assetUrl, expectedSha256, payload }); await expect(prepareMinGitZip(targetDir)).resolves.toBe(targetPath); expect(runMock).toHaveBeenCalledWith( @@ -53,4 +86,18 @@ describe("Parallels Windows MinGit preparation", () => { { timeoutMs: 270_000 }, ); }); + + it("rejects a MinGit fallback whose bytes do not match the release digest", async () => { + const assetName = "MinGit-2.55.0.4-arm64.zip"; + const assetUrl = `https://example.test/${assetName}`; + const targetDir = tempDirs.make("openclaw-windows-smoke-"); + mockMinGitDownload({ + assetName, + assetUrl, + expectedSha256: "0".repeat(64), + payload: Buffer.from("tampered MinGit archive"), + }); + + await expect(prepareMinGitZip(targetDir)).rejects.toThrow("MinGit SHA-256 mismatch"); + }); }); diff --git a/test/scripts/plugin-clawhub-new-workflow.test.ts b/test/scripts/plugin-clawhub-new-workflow.test.ts index 8bb61bfe51ca..305279df701a 100644 --- a/test/scripts/plugin-clawhub-new-workflow.test.ts +++ b/test/scripts/plugin-clawhub-new-workflow.test.ts @@ -241,8 +241,8 @@ describe("Plugin ClawHub New workflow", () => { }); const uses = (publish.steps ?? []).flatMap((entry) => (entry.uses ? [entry.uses] : [])); expect(uses).toEqual([ - "actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10", - "actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e", + "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1", + "actions/setup-node@820762786026740c76f36085b0efc47a31fe5020", "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a", ]); @@ -327,11 +327,11 @@ describe("Plugin ClawHub New workflow", () => { }); it("uses one lockfile-only ClawHub CLI graph and absolute binary path", () => { - expect(clawhubCliPackage.dependencies).toEqual({ clawhub: "0.23.1" }); + expect(clawhubCliPackage.dependencies).toEqual({ clawhub: "0.23.3" }); expect(clawhubCliLock.packages?.["node_modules/clawhub"]).toMatchObject({ integrity: - "sha512-YvUImhsVaM90BUAv3uP7lfABziwR5XL3ch2Owa+GvNxwQ2xzZFmZC0yVjAtQbvep+dDDS16nUGRwKx7jqnTOEA==", - version: "0.23.1", + "sha512-VwM6FQrZVarFRDiEqG42npUeyCu/iLhPnpO+b7kKIGRXv+TA6Lb8pboHnIgT6cmjFEnW3j/pTbshWeDQMQ7QWQ==", + version: "0.23.3", }); expect(materializerSource).toContain("npm ci"); expect(materializerSource).toContain('cd "${destination}"'); @@ -339,7 +339,7 @@ describe("Plugin ClawHub New workflow", () => { expect(materializerSource).toContain("--ignore-scripts"); expect(materializerSource).toContain("--omit=dev"); expect(materializerSource).toContain( - "f44f670d70f13a8cde566a174cae5be682ad98456ec7a85aafd497f7d8c71816", + "9606849698f041afdd2c2600633320f6b7c1e5136d06b98ce16c169c055c0f83", ); expect(materializerSource).toContain("lock_sha256="); expect(materializerSource).toContain("integrity=${clawhub_integrity}"); diff --git a/test/scripts/plugin-prerelease-test-plan.test.ts b/test/scripts/plugin-prerelease-test-plan.test.ts index e32abf6afd91..b66a080ab1d5 100644 --- a/test/scripts/plugin-prerelease-test-plan.test.ts +++ b/test/scripts/plugin-prerelease-test-plan.test.ts @@ -13,7 +13,7 @@ import { } from "../../scripts/lib/plugin-prerelease-test-plan.mts"; import { useAutoCleanupTempDirTracker } from "../helpers/temp-dir.js"; -const CHECKOUT_V6 = "actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10"; +const CHECKOUT_V6 = "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1"; const UPLOAD_ARTIFACT_V7 = "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a"; const tempDirs = useAutoCleanupTempDirTracker(afterEach); @@ -758,7 +758,7 @@ describe("scripts/lib/plugin-prerelease-test-plan.mts", () => { ); expect(inspectorRun.env).toEqual({ OPENCLAW_PLUGIN_INSPECTOR_ROOT: ".artifacts/plugin-inspector", - OPENCLAW_PLUGIN_INSPECTOR_VERSION: "0.3.10", + OPENCLAW_PLUGIN_INSPECTOR_VERSION: "0.3.21", }); expect(inspectorRun.run).toContain("extensions/"); expect(inspectorRun.run).toContain( diff --git a/test/scripts/release-beta-verifier.test.ts b/test/scripts/release-beta-verifier.test.ts index 82ef16550fb4..780fd38cf997 100644 --- a/test/scripts/release-beta-verifier.test.ts +++ b/test/scripts/release-beta-verifier.test.ts @@ -228,9 +228,9 @@ describe("parseReleaseVerifyBetaArgs", () => { describe("validateClawHubBootstrapEvidence", () => { const clawhubToolchainIntegrity = - "sha512-YvUImhsVaM90BUAv3uP7lfABziwR5XL3ch2Owa+GvNxwQ2xzZFmZC0yVjAtQbvep+dDDS16nUGRwKx7jqnTOEA=="; - const clawhubToolchainSha256 = "f44f670d70f13a8cde566a174cae5be682ad98456ec7a85aafd497f7d8c71816"; - const clawhubToolchainVersion = "0.23.1"; + "sha512-VwM6FQrZVarFRDiEqG42npUeyCu/iLhPnpO+b7kKIGRXv+TA6Lb8pboHnIgT6cmjFEnW3j/pTbshWeDQMQ7QWQ=="; + const clawhubToolchainSha256 = "9606849698f041afdd2c2600633320f6b7c1e5136d06b98ce16c169c055c0f83"; + const clawhubToolchainVersion = "0.23.3"; const releaseSha = "a".repeat(40); const workflowSha = "b".repeat(40); const packageSha = "c".repeat(64); diff --git a/test/scripts/run-opengrep.test.ts b/test/scripts/run-opengrep.test.ts index c0e44ec28d5b..aa72c0e1ac6a 100644 --- a/test/scripts/run-opengrep.test.ts +++ b/test/scripts/run-opengrep.test.ts @@ -103,7 +103,7 @@ describe("run-opengrep.sh", () => { ); expect(sarif.version).toBe("2.1.0"); expect(sarif.runs[0].tool.driver.name).toBe("Opengrep OSS"); - expect(sarif.runs[0].tool.driver.semanticVersion).toBe("1.25.0"); + expect(sarif.runs[0].tool.driver.semanticVersion).toBe("1.27.1"); expect(sarif.runs[0].results).toEqual([]); expect(fs.existsSync(argsPath)).toBe(false); }); diff --git a/test/scripts/security-sensitive-guard-workflow.test.ts b/test/scripts/security-sensitive-guard-workflow.test.ts index 2d0261959f96..b5887a614e34 100644 --- a/test/scripts/security-sensitive-guard-workflow.test.ts +++ b/test/scripts/security-sensitive-guard-workflow.test.ts @@ -76,7 +76,7 @@ describe("security-sensitive guard workflow", () => { const steps = jobs[jobName]?.steps ?? []; const checkout = steps.find((step) => step.uses?.startsWith("actions/checkout@")); - expect(checkout?.uses).toBe("actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd"); + expect(checkout?.uses).toBe("actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1"); expect(checkout?.with?.ref).toBe("${{ github.workflow_sha }}"); expect(checkout?.with?.ref).not.toBe("${{ github.event.pull_request.base.sha }}"); expect(checkout?.with?.["persist-credentials"]).toBe(false); diff --git a/test/scripts/telegram-mantis-sut.test.ts b/test/scripts/telegram-mantis-sut.test.ts index c31fd7c70bfc..9389d9cbf317 100644 --- a/test/scripts/telegram-mantis-sut.test.ts +++ b/test/scripts/telegram-mantis-sut.test.ts @@ -10,6 +10,7 @@ import { import { useAutoCleanupTempDirTracker } from "../helpers/temp-dir.js"; const tempDirs = useAutoCleanupTempDirTracker(afterEach); +const linuxIt = process.platform === "linux" ? it : it.skip; function sutSupervisorCommand(): string { const source = fs.readFileSync("scripts/mantis/mantis-sut-container.sh", "utf8"); @@ -49,7 +50,7 @@ describe("Telegram Mantis SUT", () => { ); }, 40_000); - it("releases the runtime claim before deadline-exposed removal", () => { + linuxIt("releases the runtime claim before deadline-exposed removal", () => { const root = tempDirs.make("telegram-mantis-cleanup-"); const binDir = path.join(root, "bin"); const runtimeParent = path.join(root, "runtime"); @@ -124,7 +125,7 @@ describe("Telegram Mantis SUT", () => { } }); - it("waits for the claimed runtime owner before returning from stop", () => { + linuxIt("waits for the claimed runtime owner before returning from stop", () => { const root = tempDirs.make("telegram-mantis-stop-sync-"); const binDir = path.join(root, "bin"); const runtimeParent = path.join(root, "runtime"); diff --git a/test/scripts/test-projects.test.ts b/test/scripts/test-projects.test.ts index 1215028d70c8..b0cdcbc635bd 100644 --- a/test/scripts/test-projects.test.ts +++ b/test/scripts/test-projects.test.ts @@ -589,25 +589,25 @@ describe("scripts/test-projects changed-target routing", () => { [ ".github/workflows/ios-periphery.yml", [ + "test/scripts/ci-workflow-guards.test.ts", "test/scripts/ios-periphery-comment-workflow.test.ts", "test/scripts/periphery-scope-workflows.test.ts", - "test/scripts/ci-workflow-guards.test.ts", ], ], [ ".github/workflows/macos-periphery.yml", [ + "test/scripts/ci-workflow-guards.test.ts", "test/scripts/ios-periphery-comment-workflow.test.ts", "test/scripts/periphery-scope-workflows.test.ts", - "test/scripts/ci-workflow-guards.test.ts", ], ], [ ".github/workflows/shared-openclawkit-periphery.yml", [ + "test/scripts/ci-workflow-guards.test.ts", "test/scripts/periphery-intersection.test.ts", "test/scripts/periphery-scope-workflows.test.ts", - "test/scripts/ci-workflow-guards.test.ts", ], ], ]); diff --git a/test/scripts/vercel-container-registry-publish.test.ts b/test/scripts/vercel-container-registry-publish.test.ts index 135a0f930f96..d9dad18f96ee 100644 --- a/test/scripts/vercel-container-registry-publish.test.ts +++ b/test/scripts/vercel-container-registry-publish.test.ts @@ -483,7 +483,7 @@ describe("Vercel Container Registry publishing", () => { expect(immutableSourceStep?.run).toContain("verify-docker-attestations.mjs"); expect(reusablePublish.steps?.find((step) => step.name === "Set up Docker Builder")?.uses).toBe( - "docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5", + "docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c", ); const materializeVercel = reusablePublish.steps?.find( (step) => step.name === "Materialize locked Vercel CLI", @@ -526,15 +526,15 @@ describe("Vercel Container Registry publishing", () => { }; const materialize = readFileSync("scripts/materialize-vercel-cli.sh", "utf8"); - expect(packageJson.dependencies).toEqual({ vercel: "58.4.4" }); + expect(packageJson.dependencies).toEqual({ vercel: "59.1.3" }); expect(packageLock.lockfileVersion).toBe(3); expect(packageLock.packages?.["node_modules/vercel"]).toMatchObject({ integrity: - "sha512-Mv1807Ptxhy6cQne5xV/2dD+bUGYRtpV3sLVPXEW115RBN6K/ssuvOww8eNfdGucFH9C+p5ccQF07XSyAvBPLQ==", - version: "58.4.4", + "sha512-sxCp4+S0QlO+LEvGxboxB5tbDZvVE4gO2YeRuGvdamK5CYHTOK4WDHE3u+E8VIe8FVK9mtjKeo4Jnxez5MfNdw==", + version: "59.1.3", }); expect(materialize).toContain( - 'expected_lock_sha256="db00a6dd0cab114931bc2b5a09c5a0556020c3652381019e2f817cc0426e782c"', + 'expected_lock_sha256="218f2254dddf8f978541736031e8cf5a3e7d368b71e98d47a67322bbe17f3897"', ); expect(materialize).toContain("npm ci \\\n"); expect(materialize).toContain("--ignore-scripts"); diff --git a/ui/package.json b/ui/package.json index 2df258047362..4b9241ad00ac 100644 --- a/ui/package.json +++ b/ui/package.json @@ -9,19 +9,19 @@ "test": "vitest run --config vitest.config.ts" }, "dependencies": { - "@awesome.me/webawesome": "3.10.0", - "@codemirror/commands": "6.10.4", + "@awesome.me/webawesome": "3.11.0", + "@codemirror/commands": "6.11.0", "@codemirror/language": "6.12.4", "@codemirror/language-data": "6.5.2", "@codemirror/state": "6.7.1", - "@codemirror/view": "6.43.6", + "@codemirror/view": "6.43.9", "@lezer/highlight": "1.2.3", "@lit/context": "1.1.6", "@lit/task": "1.0.3", "@modelcontextprotocol/ext-apps": "1.7.5", "@modelcontextprotocol/sdk": "1.30.0", "@noble/ed25519": "3.1.0", - "@noble/hashes": "2.2.0", + "@noble/hashes": "2.3.0", "@novnc/novnc": "1.7.0", "@openclaw/gateway-client": "workspace:*", "@openclaw/gateway-protocol": "workspace:*", @@ -38,10 +38,10 @@ "@tanstack/virtual-core": "3.17.7", "dompurify": "3.4.13", "ghostty-web": "0.4.0", - "highlight.js": "11.11.1", + "highlight.js": "11.12.0", "json5": "2.2.3", "lit": "3.3.3", - "markdown-it": "14.3.0", + "markdown-it": "15.0.0", "markdown-it-task-lists": "2.1.1", "remend": "1.3.0", "zod": "4.4.3" @@ -55,7 +55,8 @@ "openclaw": "workspace:*", "pako": "3.0.1", "playwright": "1.62.1", - "vite": "8.1.5", + "postcss": "8.5.26", + "vite": "8.2.1", "vitest": "4.1.10" } } diff --git a/ui/src/components/markdown-assistant-transcript.ts b/ui/src/components/markdown-assistant-transcript.ts index a0954b0f89f4..7199291d98be 100644 --- a/ui/src/components/markdown-assistant-transcript.ts +++ b/ui/src/components/markdown-assistant-transcript.ts @@ -1,4 +1,4 @@ -import type MarkdownIt from "markdown-it"; +import type { MarkdownIt } from "markdown-it"; import { ASSISTANT_TRANSCRIPT_ROLE_NODE_TYPE, markdownItAssistantTranscriptRoles, @@ -98,7 +98,7 @@ export function installAssistantTranscriptRoleImageRenderer( if (!token) { return ""; } - const src = token.attrGet("src")?.trim() ?? ""; + const src = String(token.attrGet("src") ?? "").trim(); // token.content preserves raw Markdown formatting in image labels. const alt = options.normalizeLabel(token.content); const roleMeta = (token.meta as AssistantTranscriptRoleImageMeta | undefined) diff --git a/ui/src/components/markdown-details.ts b/ui/src/components/markdown-details.ts index 69446080c7df..6682f383a891 100644 --- a/ui/src/components/markdown-details.ts +++ b/ui/src/components/markdown-details.ts @@ -1,5 +1,4 @@ -import type MarkdownIt from "markdown-it"; -import type StateBlock from "markdown-it/lib/rules_block/state_block.mjs"; +import type { MarkdownIt, StateBlock } from "markdown-it"; import { findMarkdownCodeSpans } from "../../../packages/markdown-core/src/reasoning-tags.js"; export const MAX_MARKDOWN_DETAILS_DEPTH = 32; diff --git a/ui/src/components/markdown-parser.ts b/ui/src/components/markdown-parser.ts index bde8bfbcff4e..74bb0b5a925a 100644 --- a/ui/src/components/markdown-parser.ts +++ b/ui/src/components/markdown-parser.ts @@ -1,6 +1,6 @@ -import MarkdownIt from "markdown-it"; +import { asOptionalRecord } from "@openclaw/normalization-core/record-coerce"; +import MarkdownIt, { type MarkdownIt as MarkdownItParser, type Token } from "markdown-it"; import markdownItTaskLists from "markdown-it-task-lists"; -import type Token from "markdown-it/lib/token.mjs"; import { t } from "../i18n/index.ts"; import { fileKindForPath, shortestFileLabels } from "./file-kind.ts"; import { decodeGitHubPathSegment, parseGitHubItemPath } from "./github-link-target.ts"; @@ -61,7 +61,7 @@ const PROGRESS_HTML_RE = /^(?:]*)?>\s*(?:<\/progress>)?|<\/pro function renderRawMarkdownHtml( tokens: readonly Token[], index: number, - env: Partial | undefined, + progressBars: boolean, block: boolean, ): string { const token = tokens[index]; @@ -69,7 +69,7 @@ function renderRawMarkdownHtml( return ""; } const content = token.content; - if (env?.progressBars) { + if (progressBars) { return PROGRESS_HTML_RE.test(content.trim()) ? content : ""; } return escapeMarkdownHtml(content) + (block ? "\n" : ""); @@ -138,7 +138,7 @@ function isFileLinkBoundaryAfter(value: string, index: number): boolean { return char === undefined || /\s/.test(char) || ".,;:!?)]}>\"'".includes(char); } -export function createMarkdownParser(): MarkdownIt { +export function createMarkdownParser(): MarkdownItParser { const markdownParser = new MarkdownIt({ html: true, // Enable HTML recognition so html_block/html_inline overrides can escape it breaks: true, @@ -278,7 +278,7 @@ export function createMarkdownParser(): MarkdownIt { for (const token of children) { if ( token.type === "link_open" && - DISALLOWED_LINK_SCHEME_RE.test(token.attrGet("href") ?? "") + DISALLOWED_LINK_SCHEME_RE.test(String(token.attrGet("href") ?? "")) ) { token.hidden = true; hideClose = true; @@ -332,7 +332,7 @@ export function createMarkdownParser(): MarkdownIt { const cjkTail = displayText.slice(cjkIndex); // Rebuild href by preserving the scheme prefix that linkify added but // display text omits (e.g. "mailto:" for emails, "http://" for www links). - const href = token.attrGet("href") ?? ""; + const href = String(token.attrGet("href") ?? ""); const prefixLength = href.indexOf(displayText); const hrefPrefix = prefixLength > 0 ? href.slice(0, prefixLength) : ""; token.attrSet("href", hrefPrefix + trimmedDisplay); @@ -368,7 +368,7 @@ export function createMarkdownParser(): MarkdownIt { continue; } if (token.type === "link_open") { - const href = token.attrGet("href"); + const href = String(token.attrGet("href") ?? ""); if (href) { let decodedHref = href; try { @@ -528,7 +528,7 @@ export function createMarkdownParser(): MarkdownIt { if (open?.type !== "link_open") { continue; } - const href = open.attrGet("href"); + const href = String(open.attrGet("href") ?? ""); const url = href ? parseWebLinkHref(href) : null; if (!url) { continue; @@ -599,12 +599,12 @@ export function createMarkdownParser(): MarkdownIt { // Renderer rules degrade to empty output on impossible token misses instead of // throwing mid-render; markdown input is untrusted and the chat view must not crash. markdownParser.renderer.rules.html_block = (tokens, index, _options, env) => - renderRawMarkdownHtml(tokens, index, env, true); + renderRawMarkdownHtml(tokens, index, env?.progressBars === true, true); markdownParser.renderer.rules.html_inline = (tokens, index, _options, env) => { const token = tokens[index]; return token?.meta?.taskListPlugin === true ? token.content - : renderRawMarkdownHtml(tokens, index, env, false); + : renderRawMarkdownHtml(tokens, index, env?.progressBars === true, false); }; markdownParser.renderer.rules.link_favicon = (tokens, index) => { const hostname: unknown = tokens[index]?.meta?.hostname; @@ -622,7 +622,7 @@ export function createMarkdownParser(): MarkdownIt { target.title === null ? "" : ` title="${escapeMarkdownHtml(target.title)}"`; return `${rendered}`; } - const sessionKey: unknown = tokens[index]?.meta?.sessionLink?.sessionKey; + const sessionKey: unknown = asOptionalRecord(tokens[index]?.meta?.sessionLink)?.sessionKey; return typeof sessionKey === "string" ? `${rendered}` : rendered; @@ -656,12 +656,7 @@ export function createMarkdownParser(): MarkdownIt { }); // Fenced and indented blocks share one interaction and overflow surface. - markdownParser.renderer.rules.fence = ( - tokens, - index, - _options, - env: Partial | undefined, - ) => { + markdownParser.renderer.rules.fence = (tokens, index, _options, env) => { const token = tokens[index]; if (!token) { return ""; @@ -671,10 +666,11 @@ export function createMarkdownParser(): MarkdownIt { const language = token.info.trim().split(/\s+/)[0] || ""; // An unfinished fence consumes the remaining input; only container closers can // follow it. Invalid fence-looking prose must not de-highlight an earlier block. + const streamingOpenFence = env?.streamingOpenFence === true; return renderMarkdownCodeBlock(token.content, language, env, { copyText: markdownCodeBlockCopyText(token.content), highlight: - !env?.streamingOpenFence || tokens.findLastIndex(({ nesting }) => nesting !== -1) !== index, + !streamingOpenFence || tokens.findLastIndex(({ nesting }) => nesting !== -1) !== index, }); }; // Override indented code blocks (code_block) with the same treatment as fence diff --git a/ui/src/components/markdown-session-links.ts b/ui/src/components/markdown-session-links.ts index 969eb01f3e27..b847ccbbce03 100644 --- a/ui/src/components/markdown-session-links.ts +++ b/ui/src/components/markdown-session-links.ts @@ -1,5 +1,5 @@ import type { ControlUiSessionNamespace } from "@openclaw/session-url-contract"; -import type MarkdownIt from "markdown-it"; +import type { MarkdownIt } from "markdown-it"; import type { ApplicationContext } from "../app/context.ts"; import { sessionNavigationTarget } from "../lib/sessions/route-navigation.ts"; import { parseAgentSessionKey } from "../lib/sessions/session-key.ts"; diff --git a/ui/src/components/markdown-tables.ts b/ui/src/components/markdown-tables.ts index 247535600b86..a0f112cc6d3a 100644 --- a/ui/src/components/markdown-tables.ts +++ b/ui/src/components/markdown-tables.ts @@ -1,5 +1,5 @@ import { render } from "lit"; -import type MarkdownIt from "markdown-it"; +import type { MarkdownIt } from "markdown-it"; import { t } from "../i18n/index.ts"; import { copyToClipboard } from "../lib/clipboard.ts"; import { toolIcons } from "./icons-tools.ts"; diff --git a/ui/src/markdown-it-task-lists.d.ts b/ui/src/markdown-it-task-lists.d.ts index fd2be698951f..f69f73c78015 100644 --- a/ui/src/markdown-it-task-lists.d.ts +++ b/ui/src/markdown-it-task-lists.d.ts @@ -1,6 +1,6 @@ // Control UI type declarations define markdown it task lists contracts. declare module "markdown-it-task-lists" { - import type MarkdownIt from "markdown-it"; + import type { MarkdownIt } from "markdown-it"; interface TaskListsOptions { enabled?: boolean; label?: boolean;