diff --git a/.editorconfig b/.editorconfig index 8c75d06c..3827920d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,7 +2,7 @@ root = true [*] charset = utf-8 -end_of_line = crlf +end_of_line = lf indent_style = space indent_size = 2 insert_final_newline = true @@ -11,5 +11,11 @@ trim_trailing_whitespace = true [*.{json,yml,yaml,md}] indent_size = 2 +[*.py] +indent_size = 4 + +[*.bat] +end_of_line = crlf + [*.md] -trim_trailing_whitespace = false \ No newline at end of file +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..41bcce29 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,14 @@ +* text=auto eol=lf + +*.bat text eol=crlf + +*.node binary +*.dll binary +*.so binary +*.dylib binary +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.woff2 binary diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5bf09869..26d779c4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,9 +4,8 @@ # unnoticed — and did (protocol's oidb-service rejection path, plus an external # contributor PR). This gates every PR on the whole suite. # -# `pnpm -r --no-bail --if-present test` runs each package's `test` script -# (skipping packages without one); --no-bail means one failing package still -# reports the rest, and the run as a whole still fails if any package fails. +# The root validation commands are the same ones contributors run locally. +# Keep this workflow as the executable source of truth for pull requests. name: CI on: @@ -33,14 +32,23 @@ jobs: - uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Type check all packages + run: pnpm typecheck + + - name: Lint managed source files + run: pnpm lint + - name: Run all package tests - run: pnpm -r --no-bail --if-present test + run: pnpm test + + - name: Build release inputs + run: pnpm run build:all # The MCP test suite regenerates the action catalog (catalog.ts + the # catalog.json the docs site consumes). Fail if the committed snapshot diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index 880f6552..4a46e070 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -78,7 +78,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' - name: Install dependencies @@ -121,7 +121,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' - name: Install dependencies @@ -145,7 +145,7 @@ jobs: # Naming convention: # SnowLuma-dev-.zip|tar.gz – zero-install (node bundled) - # SnowLuma-dev--lite.zip|tar.gz – user provides Node >= 22 + # SnowLuma-dev--lite.zip|tar.gz – user provides Node 22.13+ (23.x requires 23.4+) - name: Package (windows) if: matrix.os == 'windows-latest' shell: pwsh diff --git a/.github/workflows/mcp-npm-publish.yml b/.github/workflows/mcp-npm-publish.yml index 9f842af6..9b616f17 100644 --- a/.github/workflows/mcp-npm-publish.yml +++ b/.github/workflows/mcp-npm-publish.yml @@ -40,7 +40,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fee1f9bb..afd9a82c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,7 +39,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' - name: Install dependencies @@ -60,7 +60,7 @@ jobs: # Naming convention: # SnowLuma--.zip|tar.gz – zero-install (node bundled) - # SnowLuma---lite.zip|tar.gz – user provides Node >= 22 + # SnowLuma---lite.zip|tar.gz – user provides Node 22.13+ (23.x requires 23.4+) - name: Package (windows) if: matrix.os == 'windows-latest' shell: pwsh @@ -127,7 +127,7 @@ jobs: ## 选择下载 - | 平台 | 完整版(内置 Node.js,推荐) | Lite(需 Node.js 22+) | + | 平台 | 完整版(内置 Node.js,推荐) | Lite(Node.js 22.13+;23 系需 23.4+) | | --- | --- | --- | | Windows x64 | \`SnowLuma-${tag}-win-x64.zip\` | \`SnowLuma-${tag}-win-x64-lite.zip\` | | Linux x64 | \`SnowLuma-${tag}-linux-x64.tar.gz\` | \`SnowLuma-${tag}-linux-x64-lite.tar.gz\` | diff --git a/.github/workflows/sdk-npm-publish.yml b/.github/workflows/sdk-npm-publish.yml index 6ab45bd1..eeba8429 100644 --- a/.github/workflows/sdk-npm-publish.yml +++ b/.github/workflows/sdk-npm-publish.yml @@ -37,7 +37,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/sync-docs-catalog.yml b/.github/workflows/sync-docs-catalog.yml index 70c842db..d1ddbaae 100644 --- a/.github/workflows/sync-docs-catalog.yml +++ b/.github/workflows/sync-docs-catalog.yml @@ -38,7 +38,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' - name: Install dependencies diff --git a/.github/workflows/ui-npm-publish.yml b/.github/workflows/ui-npm-publish.yml index a7a43044..782bd14b 100644 --- a/.github/workflows/ui-npm-publish.yml +++ b/.github/workflows/ui-npm-publish.yml @@ -37,7 +37,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version-file: '.node-version' cache: 'pnpm' registry-url: 'https://registry.npmjs.org' diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..6fa8dec4 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +22.13.0 diff --git a/.npmrc b/.npmrc index f766e06a..1c92cebd 100644 --- a/.npmrc +++ b/.npmrc @@ -1,13 +1,4 @@ registry=https://registry.npmmirror.com/ -@moonrepo:registry=https://registry.npmmirror.com/ - -# Mirrors for binary downloads (sharp, esbuild, swc, electron etc.) -disturl=https://npmmirror.com/dist -electron_mirror=https://npmmirror.com/mirrors/electron/ -sass_binary_site=https://npmmirror.com/mirrors/node-sass/ -sharp_binary_host=https://npmmirror.com/mirrors/sharp -sharp_libvips_binary_host=https://npmmirror.com/mirrors/sharp-libvips -puppeteer_download_host=https://npmmirror.com/mirrors - auto-install-peers=true strict-peer-dependencies=false +engine-strict=true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 79afbebb..c55bc65b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -43,10 +43,14 @@ SnowLuma 处于开发早期,迭代速度很快,**接口与目录结构随时 ### 系统要求 -- **Node.js ≥ 22**(`engines` 字段强制,低版本会报错) -- **pnpm 10.28.0+**(项目通过 `packageManager` 字段锁定,建议用 `corepack enable` 安装匹配版本) +- **Node.js 22.13+(23 系需 23.4+)**(项目使用默认启用的 `node:sqlite`) +- **pnpm 10.28.0**(项目通过 `packageManager` 与 CI 统一版本) - macOS / Linux / Windows 均可。如果要构建原生产物,需要对应平台的工具链。 +如果系统提供 Corepack,可执行 `corepack enable pnpm`;没有 Corepack 时可执行 +`npm install -g pnpm@10.28.0`。进入仓库后,`node --version` 与 +`pnpm --version` 应满足上述版本要求,否则安装会直接失败。 + ### 拉代码、装依赖、跑起来 ```bash @@ -57,13 +61,13 @@ cd SnowLuma # 2. 切到 dev 分支(所有开发都基于 dev,不是 main) git checkout dev -# 3. 安装依赖 -pnpm install +# 3. 按锁文件安装依赖 +pnpm install --frozen-lockfile # 4. 跑类型检查,确认环境 OK pnpm typecheck -# 5. 跑测试 +# 5. 跑全工作区测试 pnpm test # 6. 启动开发模式 @@ -96,14 +100,17 @@ git checkout -b fix/onebot-mention-encoding - **写测试**:修 bug 时优先写一个能复现该 bug 的测试,确认它会 fail,再让它 pass。新增功能至少补上 happy path 的测试。 - **不要添加无意义的注释**:标识符已经说清楚的事情不需要再写一遍。注释应当解释"为什么",而不是"做了什么"。 -提交之前请本地跑一遍: +提交之前请运行与 PR CI 相同的验证入口: ```bash pnpm typecheck +pnpm lint pnpm test +pnpm run build:all ``` -CI 上跑的是同一套检查,本地通过几乎能保证 CI 通过。 +`pnpm test` 会运行所有声明了测试脚本的工作区包;只验证 Core 时可使用 +`pnpm test:core`。CI 会重新执行上述完整检查。 ### 3. 提交信息 diff --git a/README.md b/README.md index 26a0cfc4..9ff183b0 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ SnowLuma 将会话接入、协议解析、身份映射、OneBot 转换和网络 前往 [Releases](https://github.com/SnowLuma/SnowLuma/releases) 下载与你的平台匹配的版本: -| 平台 | 完整版(内置 Node.js,推荐) | Lite(需要 Node.js 22+) | +| 平台 | 完整版(内置 Node.js,推荐) | Lite(Node.js 22.13+;23 系需 23.4+) | | --- | --- | --- | | Windows x64 | `SnowLuma-vX.Y.Z-win-x64.zip` | `SnowLuma-vX.Y.Z-win-x64-lite.zip` | | Linux x64 | `SnowLuma-vX.Y.Z-linux-x64.tar.gz` | `SnowLuma-vX.Y.Z-linux-x64-lite.tar.gz` | @@ -117,15 +117,17 @@ WebUI 的“系统设置 → 存储管理”可查看受管数据占用、调整 ## 开发与贡献 -本地开发需要 Node.js 22+ 与项目锁定版本的 pnpm。所有日常开发基于 `dev` 分支: +本地开发需要 Node.js 22.13+(23 系需 23.4+)与项目锁定的 pnpm 10.28.0。所有日常开发基于 `dev` 分支: ```bash git clone https://github.com/SnowLuma/SnowLuma.git cd SnowLuma git checkout dev -pnpm install +pnpm install --frozen-lockfile pnpm typecheck +pnpm lint pnpm test +pnpm run build:all ``` - 先读 [`CONTEXT.md`](CONTEXT.md) 了解模块边界与项目词汇。 diff --git a/eslint.config.ts b/eslint.config.ts index eefbee28..3de5bec1 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -14,9 +14,12 @@ export default defineConfig([ '**/coverage/**', '**/.turbo/**', '**/.vite/**', + '.claude/**', + 'dev/**', '**/*.tsbuildinfo', '**/test/fixtures/**', 'packages/runtime/native/**', + 'packages/mcp/src/generated/**', ]), { files: ['**/*.{js,mjs,cjs,ts,tsx}'], diff --git a/package.json b/package.json index 0a3c9170..4ffd27eb 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,15 @@ "build:sdk": "pnpm --filter @snowluma/sdk build", "build:webui": "pnpm --filter webui build", "build:mcp": "pnpm --filter @snowluma/mcp build", - "build:all": "pnpm --filter @snowluma/core build:all && pnpm --filter @snowluma/sdk build && pnpm --filter @snowluma/mcp build && pnpm --filter webui build", + "build:all": "pnpm --filter @snowluma/core build:all && pnpm --filter @snowluma/sdk build && pnpm --filter @snowluma/mcp build && pnpm --filter @snowluma/ui build && pnpm --filter webui build", "dev": "pnpm --filter @snowluma/core dev", "dev:mode": "cd dist && cross-env SNOWLUMA_DEV_MODE=1 SNOWLUMA_DEV_WEBUI=1 node index.mjs", "dev:web": "pnpm --filter webui dev", - "test": "pnpm --filter @snowluma/core test", + "test": "pnpm -r --no-bail --if-present test", + "test:core": "pnpm --filter @snowluma/core test", "test:watch": "pnpm --filter @snowluma/core test:watch", "test:common": "pnpm --filter @snowluma/common test", - "test:all": "pnpm -r --if-present test", + "test:all": "pnpm test", "test:native": "pnpm -r --if-present test:native", "coverage": "pnpm --filter @snowluma/common test -- --coverage", "typecheck": "pnpm -r --if-present typecheck", @@ -46,9 +47,6 @@ "eslint-plugin-react-hooks>eslint": "10" } }, - "onlyBuiltDependencies": [ - "better-sqlite3" - ], "overrides": { "esbuild@<0.28.1": "^0.28.1", "@babel/core@<7.29.6": "^7.29.6" @@ -56,6 +54,7 @@ }, "packageManager": "pnpm@10.28.0", "engines": { - "node": ">=22" + "node": "^22.13.0 || >=23.4.0", + "pnpm": "10.28.0" } } diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 3ca5eb80..dd9b130b 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -53,7 +53,7 @@ "@snowluma/common": "workspace:*" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vitest": "^4.1.4" diff --git a/packages/common/package.json b/packages/common/package.json index 9b1d8000..a6f02133 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -70,7 +70,7 @@ "test": "vitest run" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:", "vitest": "^4.1.4" } diff --git a/packages/core/package.json b/packages/core/package.json index efb1e751..799cc92b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -52,7 +52,7 @@ "devDependencies": { "@hono/node-server": "^1.19.14", "@rollup/plugin-node-resolve": "^16.0.3", - "@types/node": "^24.12.2", + "@types/node": "catalog:", "cross-env": "^10.1.0", "hono": "^4.12.25", "tsx": "^4.21.0", diff --git a/packages/core/tests/runtime-node-version.test.ts b/packages/core/tests/runtime-node-version.test.ts new file mode 100644 index 00000000..f7778891 --- /dev/null +++ b/packages/core/tests/runtime-node-version.test.ts @@ -0,0 +1,28 @@ +import { createRequire } from 'node:module'; +import { describe, expect, it } from 'vitest'; + +const require = createRequire(import.meta.url); +const { + SUPPORTED_NODE_RANGE, + isSupportedNodeVersion, +} = require('../../runtime/check-node-version.cjs') as { + SUPPORTED_NODE_RANGE: string; + isSupportedNodeVersion: (version: string) => boolean; +}; + +describe('runtime Node.js preflight', () => { + it('accepts the documented minimum and newer versions', () => { + expect(SUPPORTED_NODE_RANGE).toBe('^22.13.0 || >=23.4.0'); + expect(isSupportedNodeVersion('22.13.0')).toBe(true); + expect(isSupportedNodeVersion('22.13.1')).toBe(true); + expect(isSupportedNodeVersion('23.4.0')).toBe(true); + expect(isSupportedNodeVersion('24.0.0')).toBe(true); + }); + + it('rejects older and malformed versions', () => { + expect(isSupportedNodeVersion('22.12.99')).toBe(false); + expect(isSupportedNodeVersion('23.3.99')).toBe(false); + expect(isSupportedNodeVersion('21.99.99')).toBe(false); + expect(isSupportedNodeVersion('not-a-version')).toBe(false); + }); +}); diff --git a/packages/core/vite.config.ts b/packages/core/vite.config.ts index 16486b1e..6ff4b60c 100644 --- a/packages/core/vite.config.ts +++ b/packages/core/vite.config.ts @@ -43,7 +43,7 @@ const [targetPlatform, targetArch] = targetTriple.split('-'); // Runtime scaffolding files copied into dist/. Windows and Linux use different // launchers, while both targets ship their matching QQ integration binaries. -const runtimeDistFiles = ['package.json', +const runtimeDistFiles = ['package.json', 'check-node-version.cjs', targetPlatform === 'win32' ? 'launcher.bat' : 'launcher.sh', ]; diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 177e0592..cbddc415 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -45,7 +45,7 @@ "devDependencies": { "@snowluma/onebot": "workspace:*", "@snowluma/proton": "workspace:*", - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vitest": "^4.1.4" diff --git a/packages/onebot/package.json b/packages/onebot/package.json index 0a76ddea..2f57a1ff 100644 --- a/packages/onebot/package.json +++ b/packages/onebot/package.json @@ -115,7 +115,7 @@ "@snowluma/websocket": "workspace:*" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vitest": "^4.1.4" diff --git a/packages/proto-defs/package.json b/packages/proto-defs/package.json index adb304f4..57146363 100644 --- a/packages/proto-defs/package.json +++ b/packages/proto-defs/package.json @@ -72,7 +72,7 @@ "@snowluma/proton": "workspace:*" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:" } } diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 506581e7..be5e636b 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -101,7 +101,7 @@ "@snowluma/proton": "workspace:*" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vitest": "^4.1.4" diff --git a/packages/proton/package.json b/packages/proton/package.json index 97159c11..7497597f 100644 --- a/packages/proton/package.json +++ b/packages/proton/package.json @@ -36,7 +36,7 @@ } }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "tsup": "^8.5.0", "vite": "catalog:", "vitest": "^4.1.4" diff --git a/packages/runtime/check-node-version.cjs b/packages/runtime/check-node-version.cjs new file mode 100644 index 00000000..d15b5323 --- /dev/null +++ b/packages/runtime/check-node-version.cjs @@ -0,0 +1,27 @@ +'use strict'; + +const SUPPORTED_NODE_RANGE = '^22.13.0 || >=23.4.0'; + +function parseNodeVersion(version) { + const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(version); + return match ? match.slice(1, 4).map(Number) : null; +} + +function isSupportedNodeVersion(version) { + const actual = parseNodeVersion(version); + if (!actual) return false; + + const [major, minor] = actual; + if (major === 22) return minor >= 13; + if (major === 23) return minor >= 4; + return major > 23; +} + +if (require.main === module && !isSupportedNodeVersion(process.versions.node)) { + console.error( + `error: SnowLuma requires Node.js ${SUPPORTED_NODE_RANGE}; found ${process.versions.node}.`, + ); + process.exitCode = 1; +} + +module.exports = { SUPPORTED_NODE_RANGE, isSupportedNodeVersion }; diff --git a/packages/runtime/launcher.bat b/packages/runtime/launcher.bat index ea696c21..963b9335 100644 --- a/packages/runtime/launcher.bat +++ b/packages/runtime/launcher.bat @@ -1,2 +1,7 @@ +node .\check-node-version.cjs +if errorlevel 1 ( + pause + exit /b 1 +) node ./index.mjs -pause \ No newline at end of file +pause diff --git a/packages/runtime/launcher.sh b/packages/runtime/launcher.sh index 6b29d9cc..49cc561a 100644 --- a/packages/runtime/launcher.sh +++ b/packages/runtime/launcher.sh @@ -8,9 +8,10 @@ if [[ -x "./node" ]]; then else NODE_BIN="$(command -v node || true)" if [[ -z "$NODE_BIN" ]]; then - echo "error: 'node' not found on PATH and no bundled ./node; install Node.js >= 22." >&2 + echo "error: 'node' not found on PATH and no bundled ./node; install Node.js 22.13+ (Node 23 requires 23.4+)." >&2 exit 127 fi fi +"$NODE_BIN" ./check-node-version.cjs exec "$NODE_BIN" ./index.mjs "$@" diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 86eab767..34ea1b43 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -88,7 +88,7 @@ "node": ">=22" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:", "vitest": "^4.1.4" } diff --git a/packages/websocket/package.json b/packages/websocket/package.json index a2420c87..70620804 100644 --- a/packages/websocket/package.json +++ b/packages/websocket/package.json @@ -17,7 +17,7 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@types/node": "^24.12.2", + "@types/node": "catalog:", "typescript": "catalog:" } } diff --git a/packages/webui/package.json b/packages/webui/package.json index f4dcab97..0074fca7 100644 --- a/packages/webui/package.json +++ b/packages/webui/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/vite": "^4.2.2", - "@types/node": "^25.6.0", + "@types/node": "catalog:", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbe6c6dd..86bd9346 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,9 @@ settings: catalogs: default: + '@types/node': + specifier: 22.13.0 + version: 22.13.0 typescript: specifier: ~6.0.2 version: 6.0.2 @@ -62,29 +65,29 @@ importers: version: link:../common devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' - version: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/common: devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/core: dependencies: @@ -117,8 +120,8 @@ importers: specifier: ^16.0.3 version: 16.0.3(rollup@4.60.4) '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 cross-env: specifier: ^10.1.0 version: 10.1.0 @@ -133,13 +136,13 @@ importers: version: 6.0.2 vite: specifier: 'catalog:' - version: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vite-plugin-cp: specifier: ^6.0.3 version: 6.0.3 vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/mcp: dependencies: @@ -154,17 +157,17 @@ importers: specifier: workspace:* version: link:../proton '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' - version: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/onebot: dependencies: @@ -188,17 +191,17 @@ importers: version: link:../websocket devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' - version: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/proto-defs: dependencies: @@ -207,8 +210,8 @@ importers: version: link:../proton devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 @@ -226,17 +229,17 @@ importers: version: link:../proton devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' - version: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/proton: dependencies: @@ -245,31 +248,31 @@ importers: version: 6.0.2 devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 tsup: specifier: ^8.5.0 version: 8.5.1(jiti@2.6.1)(postcss@8.5.15)(tsx@4.21.0)(typescript@6.0.2) vite: specifier: 'catalog:' - version: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/runtime: {} packages/sdk: devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages/ui: dependencies: @@ -347,8 +350,8 @@ importers: packages/websocket: devDependencies: '@types/node': - specifier: ^24.12.2 - version: 24.12.2 + specifier: 'catalog:' + version: 22.13.0 typescript: specifier: 'catalog:' version: 6.0.2 @@ -421,10 +424,10 @@ importers: version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.2.2(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) '@types/node': - specifier: ^25.6.0 - version: 25.6.0 + specifier: 'catalog:' + version: 22.13.0 '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -433,7 +436,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 6.0.1(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) eslint: specifier: ^10.2.0 version: 10.2.0(jiti@2.6.1) @@ -460,10 +463,10 @@ importers: version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) vite: specifier: 'catalog:' - version: 8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + version: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) vitest: specifier: ^4.1.4 - version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + version: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) packages: @@ -1904,11 +1907,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.12.2': - resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} - - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@22.13.0': + resolution: {integrity: sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -3221,11 +3221,8 @@ packages: ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -4533,12 +4530,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': + '@tailwindcss/vite@4.2.2(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + vite: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) '@tanstack/history@1.161.6': {} @@ -4598,23 +4595,19 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 25.6.0 + '@types/node': 22.13.0 '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': dependencies: - '@types/node': 25.6.0 + '@types/node': 22.13.0 '@types/ms@2.1.0': {} - '@types/node@24.12.2': + '@types/node@22.13.0': dependencies: - undici-types: 7.16.0 - - '@types/node@25.6.0': - dependencies: - undici-types: 7.19.2 + undici-types: 6.20.0 '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: @@ -4717,10 +4710,10 @@ snapshots: '@typescript-eslint/types': 8.58.2 eslint-visitor-keys: 5.0.1 - '@vitejs/plugin-react@6.0.1(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': + '@vitejs/plugin-react@6.0.1(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + vite: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) '@vitest/coverage-istanbul@4.1.4(vitest@4.1.4)': dependencies: @@ -4734,7 +4727,7 @@ snapshots: magicast: 0.5.3 obug: 2.1.1 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + vitest: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) transitivePeerDependencies: - supports-color @@ -4750,7 +4743,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + vitest: 4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) '@vitest/expect@4.1.4': dependencies: @@ -4761,21 +4754,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': + '@vitest/mocker@4.1.4(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': dependencies: '@vitest/spy': 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) - - '@vitest/mocker@4.1.4(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0))': - dependencies: - '@vitest/spy': 4.1.4 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + vite: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) '@vitest/pretty-format@4.1.4': dependencies: @@ -5972,9 +5957,7 @@ snapshots: ufo@1.6.4: {} - undici-types@7.16.0: {} - - undici-types@7.19.2: {} + undici-types@6.20.0: {} universalify@2.0.1: {} @@ -6020,7 +6003,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0): + vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -6028,32 +6011,17 @@ snapshots: rolldown: 1.1.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 22.13.0 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.6.1 sass: 1.99.0 tsx: 4.21.0 - vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.15 - rolldown: 1.1.3 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 25.6.0 - esbuild: 0.28.1 - fsevents: 2.3.3 - jiti: 2.6.1 - sass: 1.99.0 - tsx: 4.21.0 - - vitest@4.1.4(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)): + vitest@4.1.4(@types/node@22.13.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)): dependencies: '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) + '@vitest/mocker': 4.1.4(vite@8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) '@vitest/pretty-format': 4.1.4 '@vitest/runner': 4.1.4 '@vitest/snapshot': 4.1.4 @@ -6070,39 +6038,10 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.1.0(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) + vite: 8.1.0(@types/node@22.13.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.12.2 - '@vitest/coverage-istanbul': 4.1.4(vitest@4.1.4) - '@vitest/coverage-v8': 4.1.4(vitest@4.1.4) - transitivePeerDependencies: - - msw - - vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)): - dependencies: - '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0)) - '@vitest/pretty-format': 4.1.4 - '@vitest/runner': 4.1.4 - '@vitest/snapshot': 4.1.4 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.1 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vite: 8.1.0(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.6.1)(sass@1.99.0)(tsx@4.21.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 22.13.0 '@vitest/coverage-istanbul': 4.1.4(vitest@4.1.4) '@vitest/coverage-v8': 4.1.4(vitest@4.1.4) transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f9ad8946..e3ffca9a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,6 +2,7 @@ packages: - 'packages/*' catalog: + '@types/node': 22.13.0 vite: ^8.0.16 typescript: ~6.0.2