From 4dd4e364507d316ace18fbeaebf8477e346fcd11 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 13 Mar 2026 01:01:56 +0000 Subject: [PATCH] build: update deps and fix vitest 4 regressions --- extensions/acpx/package.json | 2 +- extensions/matrix/package.json | 2 +- extensions/zalo/package.json | 2 +- package.json | 16 +- pnpm-lock.yaml | 2048 +++++++++++------ src/cli/update-cli.test.ts | 8 +- .../isolated-agent.delivery.test-helpers.ts | 14 +- ...agent.direct-delivery-forum-topics.test.ts | 11 +- ...p-recipient-besteffortdeliver-true.test.ts | 8 +- src/cron/isolated-agent/run.test-harness.ts | 282 ++- .../outbound/outbound-send-service.test.ts | 3 + src/tui/gateway-chat.test.ts | 3 +- ui/package.json | 7 +- ui/src/i18n/lib/translate.ts | 32 +- ui/src/i18n/locales/en.ts | 1 + ui/src/i18n/locales/pt-BR.ts | 1 + ui/src/i18n/locales/zh-CN.ts | 1 + ui/src/i18n/locales/zh-TW.ts | 1 + ...s-chat-history-to-the-latest-message-1.png | Bin 35014 -> 35105 bytes ui/src/ui/app-settings.test.ts | 65 +- ui/src/ui/config-form.browser.test.ts | 14 +- ui/src/ui/gateway.node.test.ts | 36 +- ui/src/ui/navigation-groups.test.ts | 23 +- ui/src/ui/navigation.test.ts | 10 +- ui/src/ui/test-helpers/app-mount.ts | 37 +- ui/src/ui/views/chat.test.ts | 9 +- ui/src/ui/views/config-form.render.ts | 18 +- ui/src/ui/views/config.browser.test.ts | 43 +- ui/vitest.config.ts | 40 +- 29 files changed, 1811 insertions(+), 926 deletions(-) diff --git a/extensions/acpx/package.json b/extensions/acpx/package.json index ae4f7e695ef..19c7bbc6fa8 100644 --- a/extensions/acpx/package.json +++ b/extensions/acpx/package.json @@ -4,7 +4,7 @@ "description": "OpenClaw ACP runtime backend via acpx", "type": "module", "dependencies": { - "acpx": "0.2.0" + "acpx": "0.3.0" }, "openclaw": { "extensions": [ diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json index 8a132a9edf5..9d1112b44a7 100644 --- a/extensions/matrix/package.json +++ b/extensions/matrix/package.json @@ -8,7 +8,7 @@ "@matrix-org/matrix-sdk-crypto-nodejs": "^0.4.0", "@vector-im/matrix-bot-sdk": "0.8.0-element.3", "markdown-it": "14.1.1", - "music-metadata": "^11.12.1", + "music-metadata": "^11.12.3", "zod": "^4.3.6" }, "openclaw": { diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json index 463887c68fe..30b280c1fdb 100644 --- a/extensions/zalo/package.json +++ b/extensions/zalo/package.json @@ -4,7 +4,7 @@ "description": "OpenClaw Zalo channel plugin", "type": "module", "dependencies": { - "undici": "7.22.0", + "undici": "7.24.0", "zod": "^4.3.6" }, "openclaw": { diff --git a/package.json b/package.json index c2c2fd5120a..d5487bdf905 100644 --- a/package.json +++ b/package.json @@ -339,7 +339,7 @@ }, "dependencies": { "@agentclientprotocol/sdk": "0.16.1", - "@aws-sdk/client-bedrock": "^3.1007.0", + "@aws-sdk/client-bedrock": "^3.1008.0", "@buape/carbon": "0.0.0-beta-20260216184201", "@clack/prompts": "^1.1.0", "@discordjs/voice": "^0.19.1", @@ -388,7 +388,7 @@ "sqlite-vec": "0.1.7-alpha.2", "tar": "7.5.11", "tslog": "^4.10.2", - "undici": "^7.22.0", + "undici": "^7.24.0", "ws": "^8.19.0", "yaml": "^2.8.2", "zod": "^4.3.6" @@ -399,21 +399,21 @@ "@lit/context": "^1.1.6", "@types/express": "^5.0.6", "@types/markdown-it": "^14.1.2", - "@types/node": "^25.4.0", + "@types/node": "^25.5.0", "@types/qrcode-terminal": "^0.12.2", "@types/ws": "^8.18.1", - "@typescript/native-preview": "7.0.0-dev.20260311.1", - "@vitest/coverage-v8": "^4.0.18", + "@typescript/native-preview": "7.0.0-dev.20260312.1", + "@vitest/coverage-v8": "^4.1.0", "jscpd": "4.0.8", "lit": "^3.3.2", - "oxfmt": "0.38.0", - "oxlint": "^1.53.0", + "oxfmt": "0.40.0", + "oxlint": "^1.55.0", "oxlint-tsgolint": "^0.16.0", "signal-utils": "0.21.1", "tsdown": "0.21.2", "tsx": "^4.21.0", "typescript": "^5.9.3", - "vitest": "^4.0.18" + "vitest": "^4.1.0" }, "peerDependencies": { "@napi-rs/canvas": "^0.1.89", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 112b84f3c73..b8448ab29a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,8 +29,8 @@ importers: specifier: 0.16.1 version: 0.16.1(zod@4.3.6) '@aws-sdk/client-bedrock': - specifier: ^3.1007.0 - version: 3.1007.0 + specifier: ^3.1008.0 + version: 3.1008.0 '@buape/carbon': specifier: 0.0.0-beta-20260216184201 version: 0.0.0-beta-20260216184201(@discordjs/opus@0.10.0)(hono@4.12.7)(opusscript@0.1.1) @@ -182,8 +182,8 @@ importers: specifier: ^4.10.2 version: 4.10.2 undici: - specifier: ^7.22.0 - version: 7.22.0 + specifier: ^7.24.0 + version: 7.24.0 ws: specifier: ^8.19.0 version: 8.19.0 @@ -210,8 +210,8 @@ importers: specifier: ^14.1.2 version: 14.1.2 '@types/node': - specifier: ^25.4.0 - version: 25.4.0 + specifier: ^25.5.0 + version: 25.5.0 '@types/qrcode-terminal': specifier: ^0.12.2 version: 0.12.2 @@ -219,11 +219,11 @@ importers: specifier: ^8.18.1 version: 8.18.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260311.1 - version: 7.0.0-dev.20260311.1 + specifier: 7.0.0-dev.20260312.1 + version: 7.0.0-dev.20260312.1 '@vitest/coverage-v8': - specifier: ^4.0.18 - version: 4.0.18(@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18) + specifier: ^4.1.0 + version: 4.1.0(@vitest/browser@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0) jscpd: specifier: 4.0.8 version: 4.0.8 @@ -231,11 +231,11 @@ importers: specifier: ^3.3.2 version: 3.3.2 oxfmt: - specifier: 0.38.0 - version: 0.38.0 + specifier: 0.40.0 + version: 0.40.0 oxlint: - specifier: ^1.53.0 - version: 1.53.0(oxlint-tsgolint@0.16.0) + specifier: ^1.55.0 + version: 1.55.0(oxlint-tsgolint@0.16.0) oxlint-tsgolint: specifier: ^0.16.0 version: 0.16.0 @@ -244,7 +244,7 @@ importers: version: 0.21.1(signal-polyfill@0.2.2) tsdown: specifier: 0.21.2 - version: 0.21.2(@typescript/native-preview@7.0.0-dev.20260311.1)(typescript@5.9.3) + version: 0.21.2(@typescript/native-preview@7.0.0-dev.20260312.1)(typescript@5.9.3) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -252,14 +252,14 @@ importers: specifier: ^5.9.3 version: 5.9.3 vitest: - specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.1.0 + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) extensions/acpx: dependencies: acpx: - specifier: 0.2.0 - version: 0.2.0(zod@4.3.6) + specifier: 0.3.0 + version: 0.3.0(zod@4.3.6) extensions/bluebubbles: dependencies: @@ -385,8 +385,8 @@ importers: specifier: 14.1.1 version: 14.1.1 music-metadata: - specifier: ^11.12.1 - version: 11.12.1 + specifier: ^11.12.3 + version: 11.12.3 zod: specifier: ^4.3.6 version: 4.3.6 @@ -444,8 +444,12 @@ importers: specifier: ^4.3.6 version: 4.3.6 + extensions/ollama: {} + extensions/open-prose: {} + extensions/sglang: {} + extensions/signal: {} extensions/slack: {} @@ -488,6 +492,8 @@ importers: specifier: ^4.3.6 version: 4.3.6 + extensions/vllm: {} + extensions/voice-call: dependencies: '@sinclair/typebox': @@ -508,8 +514,8 @@ importers: extensions/zalo: dependencies: undici: - specifier: 7.22.0 - version: 7.22.0 + specifier: 7.24.0 + version: 7.24.0 zod: specifier: ^4.3.6 version: 4.3.6 @@ -565,21 +571,27 @@ importers: specifier: ^0.21.1 version: 0.21.1(signal-polyfill@0.2.2) vite: - specifier: 7.3.1 - version: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: 8.0.0 + version: 8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) devDependencies: '@vitest/browser-playwright': - specifier: 4.0.18 - version: 4.0.18(playwright@1.58.2)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + specifier: 4.1.0 + version: 4.1.0(playwright@1.58.2)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + jsdom: + specifier: ^28.1.0 + version: 28.1.0(@noble/hashes@2.0.1) playwright: specifier: ^1.58.2 version: 1.58.2 vitest: - specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: 4.1.0 + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) packages: + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + '@agentclientprotocol/sdk@0.15.0': resolution: {integrity: sha512-TH4utu23Ix8ec34srBHmDD4p3HI0cYleS1jN9lghRczPfhFlMBNrQgZWeBBe12DWy27L11eIrtciY2MXFSEiDg==} peerDependencies: @@ -599,6 +611,16 @@ packages: zod: optional: true + '@asamuzakjp/css-color@5.0.1': + resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -630,6 +652,10 @@ packages: resolution: {integrity: sha512-49hH8o6ALKkCiBUgg20HkwxNamP1yYA/n8Si73Z438EqhZGpCfScP3FfxVhrfD5o+4bV4Whi9BTzPKCa/PfUww==} engines: {node: '>=20.0.0'} + '@aws-sdk/client-bedrock@3.1008.0': + resolution: {integrity: sha512-mzxO/DplpZZT7AIZUCG7Q78OlaeHeDybYz+ZlWZPaXFjGDJwUv1E3SKskmaaQvTsMeieie0WX7gzueYrCx4YfQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/client-s3@3.1000.0': resolution: {integrity: sha512-7kPy33qNGq3NfwHC0412T6LDK1bp4+eiPzetX0sVd9cpTSXuQDKpoOFnB0Njj6uZjJDcLS3n2OeyarwwgkQ0Ow==} engines: {node: '>=20.0.0'} @@ -686,6 +712,10 @@ packages: resolution: {integrity: sha512-vthIAXJISZnj2576HeyLBj4WTeX+I7PwWeRkbOa0mVX39K13SCGxCgOFuKj2ytm9qTlLOmXe4cdEnroteFtJfw==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.972.19': + resolution: {integrity: sha512-pVJVjWqVrPqjpFq7o0mCmeZu1Y0c94OCHSYgivdCD2wfmYVtBbwQErakruhgOD8pcMcx9SCqRw1pzHKR7OGBcA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.972.13': resolution: {integrity: sha512-RtYcrxdnJHKY8MFQGLltCURcjuMjnaQpAxPE6+/QEdDHHItMKZgabRe/KScX737F9vJMQsmJy9EmMOkCnoC1JQ==} engines: {node: '>=20.0.0'} @@ -698,6 +728,10 @@ packages: resolution: {integrity: sha512-kINzc5BBxdYBkPZ0/i1AMPMOk5b5QaFNbYMElVw5QTX13AKj6jcxnv/YNl9oW9mg+Y08ti19hh01HhyEAxsSJQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.972.19': + resolution: {integrity: sha512-jOXdZ1o+CywQKr6gyxgxuUmnGwTTnY2Kxs1PM7fI6AYtDWDnmW/yKXayNqkF8KjP1unflqMWKVbVt5VgmE3L0g==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.972.14': resolution: {integrity: sha512-WqoC2aliIjQM/L3oFf6j+op/enT2i9Cc4UTxxMEKrJNECkq4/PlKE5BOjSYFcq6G9mz65EFbXJh7zOU4CvjSKQ==} engines: {node: '>=20.0.0'} @@ -710,6 +744,10 @@ packages: resolution: {integrity: sha512-yDWQ9dFTr+IMxwanFe7+tbN5++q8psZBjlUwOiCXn1EzANoBgtqBwcpYcHaMGtn0Wlfj4NuXdf2JaEx1lz5RaQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.972.20': + resolution: {integrity: sha512-0xHca2BnPY0kzjDYPH7vk8YbfdBPpWVS67rtqQMalYDQUCBYS37cZ55K6TuFxCoIyNZgSCFrVKr9PXC5BVvQQw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.972.13': resolution: {integrity: sha512-rsRG0LQA4VR+jnDyuqtXi2CePYSmfm5GNL9KxiW8DSe25YwJSr06W8TdUfONAC+rjsTI+aIH2rBGG5FjMeANrw==} engines: {node: '>=20.0.0'} @@ -734,6 +772,10 @@ packages: resolution: {integrity: sha512-YHYEfj5S2aqInRt5ub8nDOX8vAxgMvd84wm2Y3WVNfFa/53vOv9T7WOAqXI25qjj3uEcV46xxfqdDQk04h5XQA==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.972.19': + resolution: {integrity: sha512-kVjQsEU3b///q7EZGrUzol9wzwJFKbEzqJKSq82A9ShrUTEO7FNylTtby3sPV19ndADZh1H3FB3+5ZrvKtEEeg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.13': resolution: {integrity: sha512-a6iFMh1pgUH0TdcouBppLJUfPM7Yd3R9S1xFodPtCRoLqCz2RQFA3qjA8x4112PVYXEd4/pHX2eihapq39w0rA==} engines: {node: '>=20.0.0'} @@ -746,6 +788,10 @@ packages: resolution: {integrity: sha512-OqlEQpJ+J3T5B96qtC1zLLwkBloechP+fezKbCH0sbd2cCc0Ra55XpxWpk/hRj69xAOYtHvoC4orx6eTa4zU7g==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.19': + resolution: {integrity: sha512-BV1BlTFdG4w4tAihxN7iXDBoNcNewXD4q8uZlNQiUrnqxwGWUhKHODIQVSPlQGxXClEj+63m+cqZskw+ESmeZg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/eventstream-handler-node@3.972.10': resolution: {integrity: sha512-g2Z9s6Y4iNh0wICaEqutgYgt/Pmhv5Ev9G3eKGFe2w9VuZDhc76vYdop6I5OocmpHV79d4TuLG+JWg5rQIVDVA==} engines: {node: '>=20.0.0'} @@ -830,6 +876,10 @@ packages: resolution: {integrity: sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA==} engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.996.9': + resolution: {integrity: sha512-+RpVtpmQbbtzFOKhMlsRcXM/3f1Z49qTOHaA8gEpHOYruERmog6f2AUtf/oTRLCWjR9H2b3roqryV/hI7QMW8w==} + engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.972.6': resolution: {integrity: sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw==} engines: {node: '>=20.0.0'} @@ -858,6 +908,10 @@ packages: resolution: {integrity: sha512-kKvVyr53vvVc5k6RbvI6jhafxufxO2SkEw8QeEzJqwOXH/IMY7Cm0IyhnBGdqj80iiIIiIM2jGe7Fn3TIdwdrw==} engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.1008.0': + resolution: {integrity: sha512-TulwlHQBWcJs668kNUDMZHN51DeLrDsYT59Ux4a/nbvr025gM6HjKJJ3LvnZccam7OS/ZKUVkWomCneRQKJbBg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.999.0': resolution: {integrity: sha512-cx0hHUlgXULfykx4rdu/ciNAJaa3AL5xz3rieCz7NKJ68MJwlj3664Y8WR5MGgxfyYJBdamnkjNSx5Kekuc0cg==} engines: {node: '>=20.0.0'} @@ -894,6 +948,10 @@ packages: resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==} engines: {node: '>=20.0.0'} + '@aws-sdk/util-locate-window@3.965.5': + resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-user-agent-browser@3.972.6': resolution: {integrity: sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA==} @@ -927,6 +985,15 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.973.6': + resolution: {integrity: sha512-iF7G0prk7AvmOK64FcLvc/fW+Ty1H+vttajL7PvJFReU8urMxfYmynTTuFKDTA76Wgpq3FzTPKwabMQIXQHiXQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/xml-builder@3.972.10': resolution: {integrity: sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA==} engines: {node: '>=20.0.0'} @@ -939,6 +1006,10 @@ packages: resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} engines: {node: '>=18.0.0'} + '@aws/lambda-invoke-store@0.2.4': + resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} + engines: {node: '>=18.0.0'} + '@azure/abort-controller@2.1.2': resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} @@ -1005,8 +1076,15 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@borewit/text-codec@0.2.1': - resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} + '@blazediff/core@1.9.1': + resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true '@buape/carbon@0.0.0-beta-20260216184201': resolution: {integrity: sha512-u5mgYcigfPVqT7D9gVTGd+3YSflTreQmrWog7ORbb0z5w9eT8ft4rJOdw9fGwr75zMu9kXpSBaAcY2eZoJFSdA==} @@ -1034,6 +1112,37 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.0': + resolution: {integrity: sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==} + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + '@cypress/request-promise@5.0.0': resolution: {integrity: sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w==} engines: {node: '>=0.10.0'} @@ -1261,6 +1370,15 @@ packages: '@eshaz/web-worker@1.2.2': resolution: {integrity: sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true + '@google/genai@1.44.0': resolution: {integrity: sha512-kRt9ZtuXmz+tLlcNntN/VV4LRdpl6ZOu5B1KbfNgfR65db15O6sUQcwnwLka8sT/V6qysD93fWrgJHF2L7dA9A==} engines: {node: '>=20.0.0'} @@ -2168,119 +2286,123 @@ packages: resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} + '@oxc-project/runtime@0.115.0': + resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} + engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-project/types@0.115.0': resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} - '@oxfmt/binding-android-arm-eabi@0.38.0': - resolution: {integrity: sha512-lTN4//sgYywK8ulQo7a/EZVzOTGomGQv2IG/7tMYdqTV3xN3QTqWpXcZBGUzaicC4B882N+5zJLYZ37IWfUMcg==} + '@oxfmt/binding-android-arm-eabi@0.40.0': + resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.38.0': - resolution: {integrity: sha512-XbVgqR1WsIcCkfxwh2tdg3M1MWgR23YOboW2nbB8ab0gInNNLGy7cIAdr78XaoG/bGdaF4488XRhuGWq67xrzA==} + '@oxfmt/binding-android-arm64@0.40.0': + resolution: {integrity: sha512-/mbS9UUP/5Vbl2D6osIdcYiP0oie63LKMoTyGj5hyMCK/SFkl3EhtyRAfdjPvuvHC0SXdW6ePaTKkBSq1SNcIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.38.0': - resolution: {integrity: sha512-AHb6zUzWaSJra7lnPkI+Sqwu33bVWVTwCozcw9QTX8vwHaI1+5d5STqBcsJf63eSuRVRlflwMS4erlAPh3fXZw==} + '@oxfmt/binding-darwin-arm64@0.40.0': + resolution: {integrity: sha512-wRt8fRdfLiEhnRMBonlIbKrJWixoEmn6KCjKE9PElnrSDSXETGZfPb8ee+nQNTobXkCVvVLytp2o0obAsxl78Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.38.0': - resolution: {integrity: sha512-VmlmTyn7LL7Xi5htjosxGpJJHf3Drx5mgXxKE8+NT10uBXTaG3FHpRYhW3Zg5Qp7omH92Lj1+IHYqQG/HZpLnw==} + '@oxfmt/binding-darwin-x64@0.40.0': + resolution: {integrity: sha512-fzowhqbOE/NRy+AE5ob0+Y4X243WbWzDb00W+pKwD7d9tOqsAFbtWUwIyqqCoCLxj791m2xXIEeLH/3uz7zCCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.38.0': - resolution: {integrity: sha512-LynMLRqaUEAV6n4svTFanFOAnJ9D6aCCfymJ2yhMSh5fYFgCCO4q5LzPV2nATKKoyPocSErFSmYREsOFbkIlCg==} + '@oxfmt/binding-freebsd-x64@0.40.0': + resolution: {integrity: sha512-agZ9ITaqdBjcerRRFEHB8s0OyVcQW8F9ZxsszjxzeSthQ4fcN2MuOtQFWec1ed8/lDa50jSLHVE2/xPmTgtCfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.38.0': - resolution: {integrity: sha512-HRRZtOXcss5+bGqQcYahILgt14+Iu/Olf6fnoKq5ctOzU21PGHVB+zuocgt+/+ixoMLV1Drvok3ns7QwnLwNTA==} + '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': + resolution: {integrity: sha512-ZM2oQ47p28TP1DVIp7HL1QoMUgqlBFHey0ksHct7tMXoU5BqjNvPWw7888azzMt25lnyPODVuye1wvNbvVUFOA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.38.0': - resolution: {integrity: sha512-kScH8XnH7TRUckMOSZ5115Vvr2CQq+iPsuXPEzwUXSxh+gDLzt+GsXuvCsaPxp1KP+dQj88VrIjeQ4V0f9NRKw==} + '@oxfmt/binding-linux-arm-musleabihf@0.40.0': + resolution: {integrity: sha512-RBFPAxRAIsMisKM47Oe6Lwdv6agZYLz02CUhVCD1sOv5ajAcRMrnwCFBPWwGXpazToW2mjnZxFos8TuFjTU15A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.38.0': - resolution: {integrity: sha512-PUVn/vGsMs83eLhNXLNjR+Qw/EPiNxU9Tx+p+aZBK0RT9/k6RNgh/O4F1TxS4tdISmf3SSgjdnMOVW3ZfQZ2mA==} + '@oxfmt/binding-linux-arm64-gnu@0.40.0': + resolution: {integrity: sha512-Nb2XbQ+wV3W2jSIihXdPj7k83eOxeSgYP3N/SRXvQ6ZYPIk6Q86qEh5Gl/7OitX3bQoQrESqm1yMLvZV8/J7dA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxfmt/binding-linux-arm64-musl@0.38.0': - resolution: {integrity: sha512-LhtmaLCMGtAIEtaTBAoKLF3QVt+IDKIjdEZvsf0msLeTUFKxyoTNScYBXbkmvqGrm37vV0JjTPvm+OaSh3np5A==} + '@oxfmt/binding-linux-arm64-musl@0.40.0': + resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxfmt/binding-linux-ppc64-gnu@0.38.0': - resolution: {integrity: sha512-tO6tPaS21o0MaRqmOi9e3sDotlW4c+1gCx4SwdrfDXm3Y1vmIZWh0qB6t/Xh77bIGVr/4fC95eKOhKLPGwdL+Q==} + '@oxfmt/binding-linux-ppc64-gnu@0.40.0': + resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxfmt/binding-linux-riscv64-gnu@0.38.0': - resolution: {integrity: sha512-djEqwFUHczstFKp5aT43TuRWxyKZSkIZUfGXIEKa0srmIAt1CXQO5O8xLgNG4SGkXTRB1domFfCE68t9SkSmfA==} + '@oxfmt/binding-linux-riscv64-gnu@0.40.0': + resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxfmt/binding-linux-riscv64-musl@0.38.0': - resolution: {integrity: sha512-76EgMMtS6sIE+9Pl9q2GZgZpbZSzqtjQhUUIWl0RVNfHg66tstdJMhY2LXESjDYhc5vFYt9qdQNM0w0zg3onPw==} + '@oxfmt/binding-linux-riscv64-musl@0.40.0': + resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxfmt/binding-linux-s390x-gnu@0.38.0': - resolution: {integrity: sha512-JYNr3i9z/YguZg088kopjvz49hDxTEL193mYL2/02uq/6BLlQRMaKrePEITTHm/vUu4ZquAKgu4mDib6pGWdyg==} + '@oxfmt/binding-linux-s390x-gnu@0.40.0': + resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxfmt/binding-linux-x64-gnu@0.38.0': - resolution: {integrity: sha512-Lf+/Keaw1kBKx0U3HT5PsA7/3VO4ZOmaqo4sWaeAJ6tYeX8h/2IZcEONhjry6T4BETza78z6xI3Qx+18QZix6A==} + '@oxfmt/binding-linux-x64-gnu@0.40.0': + resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxfmt/binding-linux-x64-musl@0.38.0': - resolution: {integrity: sha512-4O6sf6OQuz1flk0TDrrtmXOVO3letA7fYe2IEAiJOQvKhJcMU08NiIVODQjMGZ6IQh1q91B+TlliDfbsYalw8A==} + '@oxfmt/binding-linux-x64-musl@0.40.0': + resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxfmt/binding-openharmony-arm64@0.38.0': - resolution: {integrity: sha512-GNocbjYnielmKVBk+r/2Vc4E3oTsAO4+5gRuroUVx86Jv+mpD+hyFkf260/by0YtpF1ipqyxR8chOSgRQvD2zQ==} + '@oxfmt/binding-openharmony-arm64@0.40.0': + resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.38.0': - resolution: {integrity: sha512-AwgjBHRxPckbazLpECuPOSzYlppYR1CBeUSuzZuClsmTnlZA9O1MexCEP9CROe03Yo1xBGvYtiCjwKZMBChGkg==} + '@oxfmt/binding-win32-arm64-msvc@0.40.0': + resolution: {integrity: sha512-cDkRnyT0dqwF5oIX1Cv59HKCeZQFbWWdUpXa3uvnHFT2iwYSSZspkhgjXjU6iDp5pFPaAEAe9FIbMoTgkTmKPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.38.0': - resolution: {integrity: sha512-c3u+ak6Zrh1g6pM2TgNVvOgkm7q1XaIX+5Mgxvu38ozJ5OfM8c7HZk3glMdBzlTD2uK0sSfgBq1kuXwCe1NOGg==} + '@oxfmt/binding-win32-ia32-msvc@0.40.0': + resolution: {integrity: sha512-7rPemBJjqm5Gkv6ZRCPvK8lE6AqQ/2z31DRdWazyx2ZvaSgL7QGofHXHNouRpPvNsT9yxRNQJgigsWkc+0qg4w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.38.0': - resolution: {integrity: sha512-wud1Hz0D2hYrhk6exxQQndn1htcA28wAcFb1vtP3ZXSzPFtMvc7ag/VNPv6nz6mDzM8X660jUwGEac99QcrVsA==} + '@oxfmt/binding-win32-x64-msvc@0.40.0': + resolution: {integrity: sha512-/Zmj0yTYSvmha6TG1QnoLqVT7ZMRDqXvFXXBQpIjteEwx9qvUYMBH2xbiOFhDeMUJkGwC3D6fdKsFtaqUvkwNA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2315,116 +2437,116 @@ packages: cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.53.0': - resolution: {integrity: sha512-JC89/jAx4d2zhDIbK8MC4L659FN1WiMXMBkNg7b33KXSkYpUgcbf+0nz7+EPRg+VwWiZVfaoFkNHJ7RXYb5Neg==} + '@oxlint/binding-android-arm-eabi@1.55.0': + resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.53.0': - resolution: {integrity: sha512-CY+pZfi+uyeU7AwFrEnjsNT+VfxYmKLMuk7bVxArd8f+09hQbJb8f7C7EpvTfNqrCK1J8zZlaYI4LltmEctgbQ==} + '@oxlint/binding-android-arm64@1.55.0': + resolution: {integrity: sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.53.0': - resolution: {integrity: sha512-0aqsC4HDQ94oI6kMz64iaOJ1f3bCVArxvaHJGOScBvFz6CcQedXi5b70Xg09CYjKNaHA56dW0QJfoZ/111kz1A==} + '@oxlint/binding-darwin-arm64@1.55.0': + resolution: {integrity: sha512-esakkJIt7WFAhT30P/Qzn96ehFpzdZ1mNuzpOb8SCW7lI4oB8VsyQnkSHREM671jfpuBb/o2ppzBCx5l0jpgMA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.53.0': - resolution: {integrity: sha512-e+KvuaWtnisyWojO/t5qKDbp2dvVpg+1dl4MGnTb21QpY4+4+9Y1XmZPaztcA2XNvy4BIaXFW+9JH9tMpSBqUg==} + '@oxlint/binding-darwin-x64@1.55.0': + resolution: {integrity: sha512-xDMFRCCAEK9fOH6As2z8ELsC+VDGSFRHwIKVSilw+xhgLwTDFu37rtmRbmUlx8rRGS6cWKQPTc47AVxAZEVVPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.53.0': - resolution: {integrity: sha512-hpU0ZHVeblFjmZDfgi9BxhhCpURh0KjoFy5V+Tvp9sg/fRcnMUEfaJrgz+jQfOX4jctlVWrAs1ANs91+5iV+zA==} + '@oxlint/binding-freebsd-x64@1.55.0': + resolution: {integrity: sha512-mYZqnwUD7ALCRxGenyLd1uuG+rHCL+OTT6S8FcAbVm/ZT2AZMGjvibp3F6k1SKOb2aeqFATmwRykrE41Q0GWVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.53.0': - resolution: {integrity: sha512-ccKxOpw+X4xa2pO+qbTOpxQ2x1+Ag3ViRQMnWt3gHp1LcpNgS1xd6GYc3OvehmHtrXqEV3YGczZ0I1qpBB4/2A==} + '@oxlint/binding-linux-arm-gnueabihf@1.55.0': + resolution: {integrity: sha512-LcX6RYcF9vL9ESGwJW3yyIZ/d/ouzdOKXxCdey1q0XJOW1asrHsIg5MmyKdEBR4plQx+shvYeQne7AzW5f3T1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.53.0': - resolution: {integrity: sha512-UBkBvmzSmlyH2ZObQMDKW/TuyTmUtP/XClPUyU2YLwj0qLopZTZxnDz4VG5d3wz1HQuZXO0o1QqsnQUW1v4a6Q==} + '@oxlint/binding-linux-arm-musleabihf@1.55.0': + resolution: {integrity: sha512-C+8GS1rPtK+dI7mJFkqoRBkDuqbrNihnyYQsJPS9ez+8zF9JzfvU19lawqt4l/Y23o5uQswE/DORa8aiXUih3w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.53.0': - resolution: {integrity: sha512-PQJJ1izoH9p61las6rZ0BWOznAhTDMmdUPL2IEBLuXFwhy2mSloYHvRkk39PSYJ1DyG+trqU5Z9ZbtHSGH6plg==} + '@oxlint/binding-linux-arm64-gnu@1.55.0': + resolution: {integrity: sha512-ErLE4XbmcCopA4/CIDiH6J1IAaDOMnf/KSx/aFObs4/OjAAM3sFKWGZ57pNOMxhhyBdcmcXwYymph9GwcpcqgQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxlint/binding-linux-arm64-musl@1.53.0': - resolution: {integrity: sha512-GXI1o4Thn/rtnRIL38BwrDMwVcUbIHKCsOixIWf/CkU3fCG3MXFzFTtDMt+34ik0Qk452d8kcpksL0w/hUkMZA==} + '@oxlint/binding-linux-arm64-musl@1.55.0': + resolution: {integrity: sha512-/kp65avi6zZfqEng56TTuhiy3P/3pgklKIdf38yvYeJ9/PgEeRA2A2AqKAKbZBNAqUzrzHhz9jF6j/PZvhJzTQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxlint/binding-linux-ppc64-gnu@1.53.0': - resolution: {integrity: sha512-Uahk7IVs2yBamCgeJ3XKpKT9Vh+de0pDKISFKnjEcI3c/w2CFHk1+W6Q6G3KI56HGwE9PWCp6ayhA9whXWkNIQ==} + '@oxlint/binding-linux-ppc64-gnu@1.55.0': + resolution: {integrity: sha512-A6pTdXwcEEwL/nmz0eUJ6WxmxcoIS+97GbH96gikAyre3s5deC7sts38ZVVowjS2QQFuSWkpA4ZmQC0jZSNvJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxlint/binding-linux-riscv64-gnu@1.53.0': - resolution: {integrity: sha512-sWtcU9UkrKMWsGKdFy8R6jkm9Q0VVG1VCpxVuh0HzRQQi3ENI1Nh5CkpsdfUs2MKRcOoHKbXqTscunuXjhxoxQ==} + '@oxlint/binding-linux-riscv64-gnu@1.55.0': + resolution: {integrity: sha512-clj0lnIN+V52G9tdtZl0LbdTSurnZ1NZj92Je5X4lC7gP5jiCSW+Y/oiDiSauBAD4wrHt2S7nN3pA0zfKYK/6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxlint/binding-linux-riscv64-musl@1.53.0': - resolution: {integrity: sha512-aXew1+HDvCdExijX/8NBVC854zJwxhKP3l9AHFSHQNo4EanlHtzDMIlIvP3raUkL0vXtFCkTFYezzU5HjstB8A==} + '@oxlint/binding-linux-riscv64-musl@1.55.0': + resolution: {integrity: sha512-NNu08pllN5x/O94/sgR3DA8lbrGBnTHsINZZR0hcav1sj79ksTiKKm1mRzvZvacwQ0hUnGinFo+JO75ok2PxYg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxlint/binding-linux-s390x-gnu@1.53.0': - resolution: {integrity: sha512-rVpyBSqPGou9sITcsoXqUoGBUH74bxYLYOAGUqN599Zu6BQBlBU9hh3bJQ/20D1xrhhrsbiCpVPvXpLPM5nL1w==} + '@oxlint/binding-linux-s390x-gnu@1.55.0': + resolution: {integrity: sha512-BvfQz3PRlWZRoEZ17dZCqgQsMRdpzGZomJkVATwCIGhHVVeHJMQdmdXPSjcT1DCNUrOjXnVyj1RGDj5+/Je2+Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxlint/binding-linux-x64-gnu@1.53.0': - resolution: {integrity: sha512-eOyeQ8qFQ2geXmlWJuXAOaek0hFhbMLlYsU457NMLKDRoC43Xf+eDPZ9Yk0n9jDaGJ5zBl/3Dy8wo41cnIXuLA==} + '@oxlint/binding-linux-x64-gnu@1.55.0': + resolution: {integrity: sha512-ngSOoFCSBMKVQd24H8zkbcBNc7EHhjnF1sv3mC9NNXQ/4rRjI/4Dj9+9XoDZeFEkF1SX1COSBXF1b2Pr9rqdEw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxlint/binding-linux-x64-musl@1.53.0': - resolution: {integrity: sha512-S6rBArW/zD1tob8M9PwKYrRmz+j1ss1+wjbRAJCWKd7TC3JB6noDiA95pIj9zOZVVp04MIzy5qymnYusrEyXzg==} + '@oxlint/binding-linux-x64-musl@1.55.0': + resolution: {integrity: sha512-BDpP7W8GlaG7BR6QjGZAleYzxoyKc/D24spZIF2mB3XsfALQJJT/OBmP8YpeTb1rveFSBHzl8T7l0aqwkWNdGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxlint/binding-openharmony-arm64@1.53.0': - resolution: {integrity: sha512-sd/A0Ny5sN0D/MJtlk7w2jGY4bJQou7gToa9WZF7Sj6HTyVzvlzKJWiOHfr4SulVk4ndiFQ8rKmF9rXP0EcF3A==} + '@oxlint/binding-openharmony-arm64@1.55.0': + resolution: {integrity: sha512-PS6GFvmde/pc3fCA2Srt51glr8Lcxhpf6WIBFfLphndjRrD34NEcses4TSxQrEcxYo6qVywGfylM0ZhSCF2gGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.53.0': - resolution: {integrity: sha512-QC3q7b51Er/ZurEFcFzc7RpQ/YEoEBLJuCp3WoOzhSHHH/nkUKFy+igOxlj1z3LayhEZPDQQ7sXvv2PM2cdG3Q==} + '@oxlint/binding-win32-arm64-msvc@1.55.0': + resolution: {integrity: sha512-P6JcLJGs/q1UOvDLzN8otd9JsH4tsuuPDv+p7aHqHM3PrKmYdmUvkNj4K327PTd35AYcznOCN+l4ZOaq76QzSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.53.0': - resolution: {integrity: sha512-3OvLgOqwd705hWHV2i8ni80pilvg6BUgpC2+xtVu++e/q28LKVohGh5J5QYJOrRMfWmxK0M/AUu43vUw62LAKQ==} + '@oxlint/binding-win32-ia32-msvc@1.55.0': + resolution: {integrity: sha512-gzkk4zE2zsE+WmRxFOiAZHpCpUNDFytEakqNXoNHW+PnYEOTPKDdW6nrzgSeTbGKVPXNAKQnRnMgrh7+n3Xueg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.53.0': - resolution: {integrity: sha512-xTiOkntexCdJytZ7ArIIgl3vGW5ujMM3sJNM7/+iqGAVJagCqjFFWn68HRWRLeyT66c95uR+CeFmQFI6mLQqDw==} + '@oxlint/binding-win32-x64-msvc@1.55.0': + resolution: {integrity: sha512-ZFALNow2/og75gvYzNP7qe+rREQ5xunktwA+lgykoozHZ6hw9bqg4fn5j2UvG4gIn1FXqrZHkOAXuPf5+GOYTQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2622,131 +2744,6 @@ packages: '@rolldown/pluginutils@1.0.0-rc.9': resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} - '@rollup/rollup-android-arm-eabi@4.59.0': - resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.59.0': - resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.59.0': - resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.59.0': - resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.59.0': - resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.59.0': - resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.59.0': - resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.59.0': - resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.59.0': - resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.59.0': - resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.59.0': - resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.59.0': - resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.59.0': - resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.59.0': - resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.59.0': - resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openbsd-x64@4.59.0': - resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.59.0': - resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.59.0': - resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.59.0': - resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.59.0': - resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.59.0': - resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} - cpu: [x64] - os: [win32] - '@scure/base@2.0.0': resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} @@ -2823,6 +2820,10 @@ packages: resolution: {integrity: sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==} engines: {node: '>=18.0.0'} + '@smithy/abort-controller@4.2.12': + resolution: {integrity: sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q==} + engines: {node: '>=18.0.0'} + '@smithy/chunked-blob-reader-native@4.2.2': resolution: {integrity: sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg==} engines: {node: '>=18.0.0'} @@ -2835,10 +2836,18 @@ packages: resolution: {integrity: sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg==} engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.4.11': + resolution: {integrity: sha512-YxFiiG4YDAtX7WMN7RuhHZLeTmRRAOyCbr+zB8e3AQzHPnUhS8zXjB1+cniPVQI3xbWsQPM0X2aaIkO/ME0ymw==} + engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.4.9': resolution: {integrity: sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q==} engines: {node: '>=18.0.0'} + '@smithy/core@3.23.11': + resolution: {integrity: sha512-952rGf7hBRnhUIaeLp6q4MptKW8sPFe5VvkoZ5qIzFAtx6c/QZ/54FS3yootsyUSf9gJX/NBqEBNdNR7jMIlpQ==} + engines: {node: '>=18.0.0'} + '@smithy/core@3.23.6': resolution: {integrity: sha512-4xE+0L2NrsFKpEVFlFELkIHQddBvMbQ41LRIP74dGCXnY1zQ9DgksrBcRBDJT+iOzGy4VEJIeU3hkUK5mn06kg==} engines: {node: '>=18.0.0'} @@ -2855,6 +2864,10 @@ packages: resolution: {integrity: sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==} engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.2.12': + resolution: {integrity: sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-codec@4.2.10': resolution: {integrity: sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ==} engines: {node: '>=18.0.0'} @@ -2903,6 +2916,10 @@ packages: resolution: {integrity: sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ==} engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.3.15': + resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} + engines: {node: '>=18.0.0'} + '@smithy/hash-blob-browser@4.2.11': resolution: {integrity: sha512-DrcAx3PM6AEbWZxsKl6CWAGnVwiz28Wp1ZhNu+Hi4uI/6C1PIZBIaPM2VoqBDAsOWbM6ZVzOEQMxFLLdmb4eBQ==} engines: {node: '>=18.0.0'} @@ -2915,6 +2932,10 @@ packages: resolution: {integrity: sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A==} engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.2.12': + resolution: {integrity: sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==} + engines: {node: '>=18.0.0'} + '@smithy/hash-stream-node@4.2.10': resolution: {integrity: sha512-w78xsYrOlwXKwN5tv1GnKIRbHb1HygSpeZMP6xDxCPGf1U/xDHjCpJu64c5T35UKyEPwa0bPeIcvU69VY3khUA==} engines: {node: '>=18.0.0'} @@ -2927,6 +2948,10 @@ packages: resolution: {integrity: sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g==} engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@4.2.12': + resolution: {integrity: sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==} + engines: {node: '>=18.0.0'} + '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} @@ -2951,6 +2976,10 @@ packages: resolution: {integrity: sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw==} engines: {node: '>=18.0.0'} + '@smithy/middleware-content-length@4.2.12': + resolution: {integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.4.20': resolution: {integrity: sha512-9W6Np4ceBP3XCYAGLoMCmn8t2RRVzuD1ndWPLBbv7H9CrwM9Bprf6Up6BM9ZA/3alodg0b7Kf6ftBK9R1N04vw==} engines: {node: '>=18.0.0'} @@ -2959,6 +2988,10 @@ packages: resolution: {integrity: sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw==} engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.4.25': + resolution: {integrity: sha512-dqjLwZs2eBxIUG6Qtw8/YZ4DvzHGIf0DA18wrgtfP6a50UIO7e2nY0FPdcbv5tVJKqWCCU5BmGMOUwT7Puan+A==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.37': resolution: {integrity: sha512-/1psZZllBBSQ7+qo5+hhLz7AEPGLx3Z0+e3ramMBEuPK2PfvLK4SrncDB9VegX5mBn+oP/UTDrM6IHrFjvX1ZA==} engines: {node: '>=18.0.0'} @@ -2967,6 +3000,10 @@ packages: resolution: {integrity: sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA==} engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.42': + resolution: {integrity: sha512-vbwyqHRIpIZutNXZpLAozakzamcINaRCpEy1MYmK6xBeW3xN+TyPRA123GjXnuxZIjc9848MRRCugVMTXxC4Eg==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.11': resolution: {integrity: sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg==} engines: {node: '>=18.0.0'} @@ -2975,6 +3012,10 @@ packages: resolution: {integrity: sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng==} engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.14': + resolution: {integrity: sha512-+CcaLoLa5apzSRtloOyG7lQvkUw2ZDml3hRh4QiG9WyEPfW5Ke/3tPOPiPjUneuT59Tpn8+c3RVaUvvkkwqZwg==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.10': resolution: {integrity: sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA==} engines: {node: '>=18.0.0'} @@ -2983,6 +3024,10 @@ packages: resolution: {integrity: sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg==} engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.12': + resolution: {integrity: sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==} + engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.10': resolution: {integrity: sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w==} engines: {node: '>=18.0.0'} @@ -2991,6 +3036,10 @@ packages: resolution: {integrity: sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg==} engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.12': + resolution: {integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==} + engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.12': resolution: {integrity: sha512-zo1+WKJkR9x7ZtMeMDAAsq2PufwiLDmkhcjpWPRRkmeIuOm6nq1qjFICSZbnjBvD09ei8KMo26BWxsu2BUU+5w==} engines: {node: '>=18.0.0'} @@ -2999,6 +3048,10 @@ packages: resolution: {integrity: sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.16': + resolution: {integrity: sha512-ULC8UCS/HivdCB3jhi+kLFYe4B5gxH2gi9vHBfEIiRrT2jfKiZNiETJSlzRtE6B26XbBHjPtc8iZKSNqMol9bw==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.10': resolution: {integrity: sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw==} engines: {node: '>=18.0.0'} @@ -3007,6 +3060,10 @@ packages: resolution: {integrity: sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg==} engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.12': + resolution: {integrity: sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==} + engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.10': resolution: {integrity: sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==} engines: {node: '>=18.0.0'} @@ -3015,6 +3072,10 @@ packages: resolution: {integrity: sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ==} engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.12': + resolution: {integrity: sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.10': resolution: {integrity: sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA==} engines: {node: '>=18.0.0'} @@ -3023,6 +3084,10 @@ packages: resolution: {integrity: sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA==} engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.12': + resolution: {integrity: sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.10': resolution: {integrity: sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q==} engines: {node: '>=18.0.0'} @@ -3031,6 +3096,10 @@ packages: resolution: {integrity: sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ==} engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.12': + resolution: {integrity: sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==} + engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.10': resolution: {integrity: sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg==} engines: {node: '>=18.0.0'} @@ -3039,6 +3108,10 @@ packages: resolution: {integrity: sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw==} engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.12': + resolution: {integrity: sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==} + engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.5': resolution: {integrity: sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug==} engines: {node: '>=18.0.0'} @@ -3047,6 +3120,10 @@ packages: resolution: {integrity: sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw==} engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.7': + resolution: {integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==} + engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.3.10': resolution: {integrity: sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA==} engines: {node: '>=18.0.0'} @@ -3055,6 +3132,10 @@ packages: resolution: {integrity: sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ==} engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.3.12': + resolution: {integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==} + engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.12.0': resolution: {integrity: sha512-R8bQ9K3lCcXyZmBnQqUZJF4ChZmtWT5NLi6x5kgWx5D+/j0KorXcA0YcFg/X5TOgnTCy1tbKc6z2g2y4amFupQ==} engines: {node: '>=18.0.0'} @@ -3063,10 +3144,18 @@ packages: resolution: {integrity: sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.12.5': + resolution: {integrity: sha512-UqwYawyqSr/aog8mnLnfbPurS0gi4G7IYDcD28cUIBhsvWs1+rQcL2IwkUQ+QZ7dibaoRzhNF99fAQ9AUcO00w==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.13.0': resolution: {integrity: sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==} engines: {node: '>=18.0.0'} + '@smithy/types@4.13.1': + resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.10': resolution: {integrity: sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A==} engines: {node: '>=18.0.0'} @@ -3075,6 +3164,10 @@ packages: resolution: {integrity: sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==} engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.12': + resolution: {integrity: sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==} + engines: {node: '>=18.0.0'} + '@smithy/util-base64@4.3.1': resolution: {integrity: sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==} engines: {node: '>=18.0.0'} @@ -3127,6 +3220,10 @@ packages: resolution: {integrity: sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@4.3.41': + resolution: {integrity: sha512-M1w1Ux0rSVvBOxIIiqbxvZvhnjQ+VUjJrugtORE90BbadSTH+jsQL279KRL3Hv0w69rE7EuYkV/4Lepz/NBW9g==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.39': resolution: {integrity: sha512-otWuoDm35btJV1L8MyHrPl462B07QCdMTktKc7/yM+Psv6KbED/ziXiHnmr7yPHUjfIwE9S8Max0LO24Mo3ZVg==} engines: {node: '>=18.0.0'} @@ -3135,6 +3232,10 @@ packages: resolution: {integrity: sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.44': + resolution: {integrity: sha512-YPze3/lD1KmWuZsl9JlfhcgGLX7AXhSoaCDtiPntUjNW5/YY0lOHjkcgxyE9x/h5vvS1fzDifMGjzqnNlNiqOQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.3.1': resolution: {integrity: sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg==} engines: {node: '>=18.0.0'} @@ -3143,6 +3244,10 @@ packages: resolution: {integrity: sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA==} engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.3.3': + resolution: {integrity: sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==} + engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@4.2.1': resolution: {integrity: sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==} engines: {node: '>=18.0.0'} @@ -3159,6 +3264,10 @@ packages: resolution: {integrity: sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw==} engines: {node: '>=18.0.0'} + '@smithy/util-middleware@4.2.12': + resolution: {integrity: sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.10': resolution: {integrity: sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A==} engines: {node: '>=18.0.0'} @@ -3167,6 +3276,10 @@ packages: resolution: {integrity: sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw==} engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.12': + resolution: {integrity: sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.15': resolution: {integrity: sha512-OlOKnaqnkU9X+6wEkd7mN+WB7orPbCVDauXOj22Q7VtiTkvy7ZdSsOg4QiNAZMgI4OkvNf+/VLUC3VXkxuWJZw==} engines: {node: '>=18.0.0'} @@ -3175,6 +3288,10 @@ packages: resolution: {integrity: sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ==} engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.19': + resolution: {integrity: sha512-v4sa+3xTweL1CLO2UP0p7tvIMH/Rq1X4KKOxd568mpe6LSLMQCnDHs4uv7m3ukpl3HvcN2JH6jiCS0SNRXKP/w==} + engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.2.1': resolution: {integrity: sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==} engines: {node: '>=18.0.0'} @@ -3463,8 +3580,8 @@ packages: '@types/node@24.12.0': resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} - '@types/node@25.4.0': - resolution: {integrity: sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==} + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} '@types/qrcode-terminal@0.12.2': resolution: {integrity: sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==} @@ -3511,43 +3628,43 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-k3UqlA40U9m8meAyliJdbTayDSGZRBGNsEDP2rtjOomLUo2IA0eIi4vNAjQKzsXFtyfoQ59MGAqOLSO/CzVrQA==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-AhPdPuVe4osxWoeImS21jVhc0VJ2QnzLUZtEFMakY0Rf70C0b6il/m7hwRf9wkr9xXZLVOVJ1kYrpvQRuHFE0Q==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-8PNUCS1HPeXMK1F+1D3A4MyD+9Nil2mM3mWSwayUZpqT/A+dfEtcoo4Oe7Gz6qvMZbhCjbipwhTC84ilisiE1g==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-9I0P1/c/mQ6UVcQq7SYY/FJD23IN5T2y4GbSFOKQvzNVASV0tMnX4YV8YNf6b5jcwCzrVcrGNKKgWCj8xEFf8Q==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-WwRJO5ryMEs4Flro6JKNq0T+hR78eYFrItautu9o6EsIpeevk7Cq7T0BBgCrAf+A5aKts21HpiWzfHI0YP/CuQ==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-xwoMywagcvx9F2ocM+ybeg7eH9PHDpx1FBGOrloL1/xkGC4BCrn/RcaAe0AhzXzoJfHHmg7Sz9VzYmTR4N1Kqw==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-9T8kwNALCWzuNe00ri/f6wwoVD64YZW24cqkycFeptIF+DfNxfHMddWd7fvtHf0OKzPtkL83mkjBtviNeVKOfQ==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-/nAOhSLTxMJfHY+2cKdUxi2wYadf3g1GtC3VzgPfZMNxA28dJ8x75T26aSLaFYluh7cCSAwuGesCImijQDS2Lw==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-oMm3cb4njzMLBb61TI4EGq5Igxc+hoPHHNpMWqORfiYu/uQZWnter/twamTrZo6boCFtIa59mrGkhR3Qz7kauA==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-vZs0LLpZw50Ac0TCmF9ND7KphJBhOfp9fxLhC+hFWaUU1iCQRjv1MtvroitF5OJKb21qFPJxkU+kfhlCRxLfqg==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-EQ5nz4qrwtzMZ5bjdMVQ2ke5BHQWDBz9IQsdh/8UU819cs5ZBnKmFFe5wOrIngqFvq4EoWKDXf983Vw0q4erkg==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-4LY/gd9cj1xDY2nEthB7WDW4j/fIYJ9wp9H71nOLd0wNNtkfqRXWSkQEeb+RByhV+dIb/n6kWbQQMeNfk7q4VQ==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-Y/5A7BaRFV1Pro4BqNW3nVDuId7YdPXktl769x1yUjTDQLH6YJEJVeBkFkT0+4e1O5IL92rxxr8rWMLypNKnTw==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-EP2JPo9s9EPUwXSX83qTImlDHhgkLeBbJ2MMdj+XrfBltHAvHKktzeSS73UhP77s/TnTkJR6BTWHENKKvLRbGQ==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260311.1': - resolution: {integrity: sha512-BnyOW/mdZVZGevyeJ4RRY60CI4F121QBa++8Rwd+/Ms48OKQ30eMhaIKWGowz/u4WjJZmrzhFxIzN92XeSWMCQ==} + '@typescript/native-preview@7.0.0-dev.20260312.1': + resolution: {integrity: sha512-FwhlXG/yG0d7b2UmooBYyszLMpICRYdYGE6v65ZlMnH7cWKQyyFpMFgH9suRf3Np4QCbN+7qisj+F23kQOidVw==} hasBin: true '@typespec/ts-http-runtime@0.3.3': @@ -3568,54 +3685,54 @@ packages: resolution: {integrity: sha512-2FFo/Kz2vTnOZDv59Q0s803LHf7KzuQ2EwOYYAtO0zUKJ8pV5CPsVC/IHyFb+Fsxl3R9XWFiX529yhslb4v9cQ==} engines: {node: '>=22.0.0'} - '@vitest/browser-playwright@4.0.18': - resolution: {integrity: sha512-gfajTHVCiwpxRj1qh0Sh/5bbGLG4F/ZH/V9xvFVoFddpITfMta9YGow0W6ZpTTORv2vdJuz9TnrNSmjKvpOf4g==} + '@vitest/browser-playwright@4.1.0': + resolution: {integrity: sha512-2RU7pZELY9/aVMLmABNy1HeZ4FX23FXGY1jRuHLHgWa2zaAE49aNW2GLzebW+BmbTZIKKyFF1QXvk7DEWViUCQ==} peerDependencies: playwright: '*' - vitest: 4.0.18 + vitest: 4.1.0 - '@vitest/browser@4.0.18': - resolution: {integrity: sha512-gVQqh7paBz3gC+ZdcCmNSWJMk70IUjDeVqi+5m5vYpEHsIwRgw3Y545jljtajhkekIpIp5Gg8oK7bctgY0E2Ng==} + '@vitest/browser@4.1.0': + resolution: {integrity: sha512-tG/iOrgbiHQks0ew7CdelUyNEHkv8NLrt+CqdTivIuoSnXvO7scWMn4Kqo78/UGY1NJ6Hv+vp8BvRnED/bjFdQ==} peerDependencies: - vitest: 4.0.18 + vitest: 4.1.0 - '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} + '@vitest/coverage-v8@4.1.0': + resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} peerDependencies: - '@vitest/browser': 4.0.18 - vitest: 4.0.18 + '@vitest/browser': 4.1.0 + vitest: 4.1.0 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + '@vitest/expect@4.1.0': + resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} - '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + '@vitest/mocker@4.1.0': + resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + '@vitest/pretty-format@4.1.0': + resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} - '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + '@vitest/runner@4.1.0': + resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} - '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + '@vitest/snapshot@4.1.0': + resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} - '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + '@vitest/spy@4.1.0': + resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} - '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vitest/utils@4.1.0': + resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} '@wasm-audio-decoders/common@9.0.7': resolution: {integrity: sha512-WRaUuWSKV7pkttBygml/a6dIEpatq2nnZGFIoPTc5yPLkxL6Wk4YaslPM98OPQvWacvNZ+Py9xROGDtrFBDzag==} @@ -3679,8 +3796,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acpx@0.2.0: - resolution: {integrity: sha512-5E38uizINoEpTuHjLvlkWTfFqeLRqnO7vS3z3qmAXZCEZVExE+oYhJ1TClIl8KZZ9gKaoJF+5c0ltDcJDzG67g==} + acpx@0.3.0: + resolution: {integrity: sha512-5F3GRojIqXyMCzWZ6fT3+mgXXS0sRR7Phc6VyAdEUyfjQQTVeJHr81+XQ/Z4jHrP3pbjtqwlRC6E0O5Glc8lOg==} engines: {node: '>=22.12.0'} hasBin: true @@ -3792,8 +3909,8 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.11: - resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} async-lock@1.4.1: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} @@ -3904,6 +4021,9 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -4128,6 +4248,9 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} @@ -4159,6 +4282,10 @@ packages: css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -4166,6 +4293,10 @@ packages: cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + cssstyle@6.2.0: + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} + engines: {node: '>=20'} + curve25519-js@0.0.4: resolution: {integrity: sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==} @@ -4181,6 +4312,10 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} @@ -4201,6 +4336,9 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -4324,6 +4462,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} @@ -4340,8 +4482,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -4706,6 +4848,10 @@ packages: resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} engines: {node: ^20.17.0 || >=22.9.0} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -4850,6 +4996,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} @@ -4922,6 +5071,15 @@ packages: resolution: {integrity: sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==} hasBin: true + jsdom@28.1.0: + resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -5007,74 +5165,74 @@ packages: lifecycle-utils@3.1.1: resolution: {integrity: sha512-gNd3OvhFNjHykJE3uGntz7UuPzWlK9phrIdXxU9Adis0+ExkwnZibfxCJWiWWZ+a6VbKiZrb+9D9hCQWd4vjTg==} - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} limiter@1.1.5: @@ -5220,6 +5378,9 @@ packages: mdast-util-to-hast@13.2.1: resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -5340,8 +5501,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - music-metadata@11.12.1: - resolution: {integrity: sha512-j++ltLxHDb5VCXET9FzQ8bnueiLHwQKgCO7vcbkRH/3F7fRjPkv6qncGEJ47yFhmemcYtgvsOAlcQ1dRBTkDjg==} + music-metadata@11.12.3: + resolution: {integrity: sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==} engines: {node: '>=18'} mz@2.7.0: @@ -5547,8 +5708,8 @@ packages: resolution: {integrity: sha512-4/8JfsetakdeEa4vAYV45FW20aY+B/+K8NEXp5Eiar3wR8726whgHrbSg5Ar/ZY1FLJ/AGtUqV7W2IVF+Gvp9A==} engines: {node: '>=20'} - oxfmt@0.38.0: - resolution: {integrity: sha512-RGYfnnxmCz8dMQ1Oo5KrYkNRc9cne2WL2vfE+datWNkgiSAkfUsqpGLR7rnkN6cQFgQkHDZH400eXN6izJ8Lww==} + oxfmt@0.40.0: + resolution: {integrity: sha512-g0C3I7xUj4b4DcagevM9kgH6+pUHytikxUcn3/VUkvzTNaaXBeyZqb7IBsHwojeXm4mTBEC/aBjBTMVUkZwWUQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -5556,8 +5717,8 @@ packages: resolution: {integrity: sha512-4RuJK2jP08XwqtUu+5yhCbxEauCm6tv2MFHKEMsjbosK2+vy5us82oI3VLuHwbNyZG7ekZA26U2LLHnGR4frIA==} hasBin: true - oxlint@1.53.0: - resolution: {integrity: sha512-TLW0PzGbpO1JxUnuy1pIqVPjQUGh4fNfxu5XJbdFIRFVaJ0UFzTjjk/hSFTMRxN6lZub53xL/IwJNEkrh7VtDg==} + oxlint@1.55.0: + resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5627,6 +5788,9 @@ packages: parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseley@0.12.1: resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} @@ -5703,10 +5867,6 @@ packages: resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} hasBin: true - pixelmatch@7.1.0: - resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} - hasBin: true - playwright-core@1.58.2: resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} engines: {node: '>=18'} @@ -5725,6 +5885,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + postgres@3.4.8: resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==} engines: {node: '>=12'} @@ -6006,11 +6170,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.59.0: - resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -6034,6 +6193,10 @@ packages: sanitize-html@2.17.1: resolution: {integrity: sha512-ehFCW+q1a4CSOWRAdX97BX/6/PDEkCqw7/0JXZAGQV57FQB3YOkTa/rrzHPeJ+Aghy4vZAFfWMYyfxIiB7F/gw==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -6234,6 +6397,9 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stdin-discarder@0.3.1: resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} engines: {node: '>=18'} @@ -6312,6 +6478,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + table-layout@4.1.1: resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} engines: {node: '>=12.17'} @@ -6354,8 +6523,8 @@ packages: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: @@ -6388,6 +6557,10 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -6495,6 +6668,10 @@ packages: resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} + undici@7.24.0: + resolution: {integrity: sha512-jxytwMHhsbdpBXxLAcuu0fzlQeXCNnWdDyRHpvWsUl8vd98UwYdl9YTyn8/HcpcJPC3pwUveefsa3zTxyD/ERg==} + engines: {node: '>=20.18.1'} + unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -6581,15 +6758,16 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@8.0.0: + resolution: {integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.0.0-alpha.31 + esbuild: ^0.27.0 jiti: '>=1.21.0' less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -6600,12 +6778,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -6621,20 +6801,21 @@ packages: yaml: optional: true - vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + vitest@4.1.0: + resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.18 - '@vitest/browser-preview': 4.0.18 - '@vitest/browser-webdriverio': 4.0.18 - '@vitest/ui': 4.0.18 + '@vitest/browser-playwright': 4.1.0 + '@vitest/browser-preview': 4.1.0 + '@vitest/browser-webdriverio': 4.1.0 + '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -6659,6 +6840,10 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -6666,6 +6851,18 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -6721,6 +6918,13 @@ packages: utf-8-validate: optional: true + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -6780,6 +6984,8 @@ packages: snapshots: + '@acemir/cssom@0.9.31': {} + '@agentclientprotocol/sdk@0.15.0(zod@4.3.6)': dependencies: zod: 4.3.6 @@ -6794,6 +7000,24 @@ snapshots: optionalDependencies: zod: 4.3.6 + '@asamuzakjp/css-color@5.0.1': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 + + '@asamuzakjp/dom-selector@6.8.1': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.6 + + '@asamuzakjp/nwsapi@2.3.9': {} + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -6821,7 +7045,7 @@ snapshots: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.973.5 - '@aws-sdk/util-locate-window': 3.965.4 + '@aws-sdk/util-locate-window': 3.965.5 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -6938,6 +7162,51 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-bedrock@3.1008.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.19 + '@aws-sdk/credential-provider-node': 3.972.20 + '@aws-sdk/middleware-host-header': 3.972.7 + '@aws-sdk/middleware-logger': 3.972.7 + '@aws-sdk/middleware-recursion-detection': 3.972.7 + '@aws-sdk/middleware-user-agent': 3.972.20 + '@aws-sdk/region-config-resolver': 3.972.7 + '@aws-sdk/token-providers': 3.1008.0 + '@aws-sdk/types': 3.973.5 + '@aws-sdk/util-endpoints': 3.996.4 + '@aws-sdk/util-user-agent-browser': 3.972.7 + '@aws-sdk/util-user-agent-node': 3.973.6 + '@smithy/config-resolver': 4.4.11 + '@smithy/core': 3.23.11 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/hash-node': 4.2.12 + '@smithy/invalid-dependency': 4.2.12 + '@smithy/middleware-content-length': 4.2.12 + '@smithy/middleware-endpoint': 4.4.25 + '@smithy/middleware-retry': 4.4.42 + '@smithy/middleware-serde': 4.2.14 + '@smithy/middleware-stack': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/node-http-handler': 4.4.16 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.41 + '@smithy/util-defaults-mode-node': 4.2.44 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.12 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-s3@3.1000.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 @@ -7034,15 +7303,15 @@ snapshots: dependencies: '@aws-sdk/types': 3.973.5 '@aws-sdk/xml-builder': 3.972.10 - '@smithy/core': 3.23.9 - '@smithy/node-config-provider': 4.3.11 - '@smithy/property-provider': 4.2.11 - '@smithy/protocol-http': 5.3.11 - '@smithy/signature-v4': 5.3.11 - '@smithy/smithy-client': 4.12.3 - '@smithy/types': 4.13.0 + '@smithy/core': 3.23.11 + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/signature-v4': 5.3.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 '@smithy/util-base64': 4.3.2 - '@smithy/util-middleware': 4.2.11 + '@smithy/util-middleware': 4.2.12 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 @@ -7071,8 +7340,8 @@ snapshots: dependencies: '@aws-sdk/core': 3.973.19 '@aws-sdk/types': 3.973.5 - '@smithy/property-provider': 4.2.11 - '@smithy/types': 4.13.0 + '@smithy/property-provider': 4.2.12 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.972.15': @@ -7105,13 +7374,13 @@ snapshots: dependencies: '@aws-sdk/core': 3.973.19 '@aws-sdk/types': 3.973.5 - '@smithy/fetch-http-handler': 5.3.13 - '@smithy/node-http-handler': 4.4.14 - '@smithy/property-provider': 4.2.11 - '@smithy/protocol-http': 5.3.11 - '@smithy/smithy-client': 4.12.3 - '@smithy/types': 4.13.0 - '@smithy/util-stream': 4.5.17 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/node-http-handler': 4.4.16 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 + '@smithy/util-stream': 4.5.19 tslib: 2.8.1 '@aws-sdk/credential-provider-ini@3.972.13': @@ -7171,6 +7440,25 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-ini@3.972.19': + dependencies: + '@aws-sdk/core': 3.973.19 + '@aws-sdk/credential-provider-env': 3.972.17 + '@aws-sdk/credential-provider-http': 3.972.19 + '@aws-sdk/credential-provider-login': 3.972.19 + '@aws-sdk/credential-provider-process': 3.972.17 + '@aws-sdk/credential-provider-sso': 3.972.19 + '@aws-sdk/credential-provider-web-identity': 3.972.19 + '@aws-sdk/nested-clients': 3.996.9 + '@aws-sdk/types': 3.973.5 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-login@3.972.13': dependencies: '@aws-sdk/core': 3.973.15 @@ -7210,6 +7498,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-login@3.972.19': + dependencies: + '@aws-sdk/core': 3.973.19 + '@aws-sdk/nested-clients': 3.996.9 + '@aws-sdk/types': 3.973.5 + '@smithy/property-provider': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-node@3.972.14': dependencies: '@aws-sdk/credential-provider-env': 3.972.13 @@ -7261,6 +7562,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-node@3.972.20': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.17 + '@aws-sdk/credential-provider-http': 3.972.19 + '@aws-sdk/credential-provider-ini': 3.972.19 + '@aws-sdk/credential-provider-process': 3.972.17 + '@aws-sdk/credential-provider-sso': 3.972.19 + '@aws-sdk/credential-provider-web-identity': 3.972.19 + '@aws-sdk/types': 3.973.5 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-process@3.972.13': dependencies: '@aws-sdk/core': 3.973.15 @@ -7283,9 +7601,9 @@ snapshots: dependencies: '@aws-sdk/core': 3.973.19 '@aws-sdk/types': 3.973.5 - '@smithy/property-provider': 4.2.11 - '@smithy/shared-ini-file-loader': 4.4.6 - '@smithy/types': 4.13.0 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@aws-sdk/credential-provider-sso@3.972.13': @@ -7327,6 +7645,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-sso@3.972.19': + dependencies: + '@aws-sdk/core': 3.973.19 + '@aws-sdk/nested-clients': 3.996.9 + '@aws-sdk/token-providers': 3.1008.0 + '@aws-sdk/types': 3.973.5 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.13': dependencies: '@aws-sdk/core': 3.973.15 @@ -7363,6 +7694,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.19': + dependencies: + '@aws-sdk/core': 3.973.19 + '@aws-sdk/nested-clients': 3.996.9 + '@aws-sdk/types': 3.973.5 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/eventstream-handler-node@3.972.10': dependencies: '@aws-sdk/types': 3.973.5 @@ -7421,8 +7764,8 @@ snapshots: '@aws-sdk/middleware-host-header@3.972.7': dependencies: '@aws-sdk/types': 3.973.5 - '@smithy/protocol-http': 5.3.11 - '@smithy/types': 4.13.0 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@aws-sdk/middleware-location-constraint@3.972.6': @@ -7440,7 +7783,7 @@ snapshots: '@aws-sdk/middleware-logger@3.972.7': dependencies: '@aws-sdk/types': 3.973.5 - '@smithy/types': 4.13.0 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.972.6': @@ -7454,9 +7797,9 @@ snapshots: '@aws-sdk/middleware-recursion-detection@3.972.7': dependencies: '@aws-sdk/types': 3.973.5 - '@aws/lambda-invoke-store': 0.2.3 - '@smithy/protocol-http': 5.3.11 - '@smithy/types': 4.13.0 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@aws-sdk/middleware-sdk-s3@3.972.15': @@ -7508,10 +7851,10 @@ snapshots: '@aws-sdk/core': 3.973.19 '@aws-sdk/types': 3.973.5 '@aws-sdk/util-endpoints': 3.996.4 - '@smithy/core': 3.23.9 - '@smithy/protocol-http': 5.3.11 - '@smithy/types': 4.13.0 - '@smithy/util-retry': 4.2.11 + '@smithy/core': 3.23.11 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-retry': 4.2.12 tslib: 2.8.1 '@aws-sdk/middleware-websocket@3.972.12': @@ -7658,6 +8001,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/nested-clients@3.996.9': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.19 + '@aws-sdk/middleware-host-header': 3.972.7 + '@aws-sdk/middleware-logger': 3.972.7 + '@aws-sdk/middleware-recursion-detection': 3.972.7 + '@aws-sdk/middleware-user-agent': 3.972.20 + '@aws-sdk/region-config-resolver': 3.972.7 + '@aws-sdk/types': 3.973.5 + '@aws-sdk/util-endpoints': 3.996.4 + '@aws-sdk/util-user-agent-browser': 3.972.7 + '@aws-sdk/util-user-agent-node': 3.973.6 + '@smithy/config-resolver': 4.4.11 + '@smithy/core': 3.23.11 + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/hash-node': 4.2.12 + '@smithy/invalid-dependency': 4.2.12 + '@smithy/middleware-content-length': 4.2.12 + '@smithy/middleware-endpoint': 4.4.25 + '@smithy/middleware-retry': 4.4.42 + '@smithy/middleware-serde': 4.2.14 + '@smithy/middleware-stack': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/node-http-handler': 4.4.16 + '@smithy/protocol-http': 5.3.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.41 + '@smithy/util-defaults-mode-node': 4.2.44 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.12 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/region-config-resolver@3.972.6': dependencies: '@aws-sdk/types': 3.973.4 @@ -7730,6 +8116,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.1008.0': + dependencies: + '@aws-sdk/core': 3.973.19 + '@aws-sdk/nested-clients': 3.996.9 + '@aws-sdk/types': 3.973.5 + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/token-providers@3.999.0': dependencies: '@aws-sdk/core': 3.973.15 @@ -7767,9 +8165,9 @@ snapshots: '@aws-sdk/util-endpoints@3.996.4': dependencies: '@aws-sdk/types': 3.973.5 - '@smithy/types': 4.13.0 - '@smithy/url-parser': 4.2.11 - '@smithy/util-endpoints': 3.3.2 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-endpoints': 3.3.3 tslib: 2.8.1 '@aws-sdk/util-format-url@3.972.6': @@ -7790,6 +8188,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@aws-sdk/util-locate-window@3.965.5': + dependencies: + tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.972.6': dependencies: '@aws-sdk/types': 3.973.4 @@ -7800,7 +8202,7 @@ snapshots: '@aws-sdk/util-user-agent-browser@3.972.7': dependencies: '@aws-sdk/types': 3.973.5 - '@smithy/types': 4.13.0 + '@smithy/types': 4.13.1 bowser: 2.14.1 tslib: 2.8.1 @@ -7828,6 +8230,15 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.973.6': + dependencies: + '@aws-sdk/middleware-user-agent': 3.972.20 + '@aws-sdk/types': 3.973.5 + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-config-provider': 4.2.2 + tslib: 2.8.1 + '@aws-sdk/xml-builder@3.972.10': dependencies: '@smithy/types': 4.13.0 @@ -7842,6 +8253,8 @@ snapshots: '@aws/lambda-invoke-store@0.2.3': {} + '@aws/lambda-invoke-store@0.2.4': {} + '@azure/abort-controller@2.1.2': dependencies: tslib: 2.8.1 @@ -7909,11 +8322,17 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@borewit/text-codec@0.2.1': {} + '@blazediff/core@1.9.1': {} + + '@borewit/text-codec@0.2.2': {} + + '@bramus/specificity@2.4.2': + dependencies: + css-tree: 3.2.1 '@buape/carbon@0.0.0-beta-20260216184201(@discordjs/opus@0.10.0)(hono@4.12.7)(opusscript@0.1.1)': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 discord-api-types: 0.38.37 optionalDependencies: '@cloudflare/workers-types': 4.20260120.0 @@ -7964,6 +8383,28 @@ snapshots: '@colors/colors@1.5.0': optional: true + '@csstools/color-helpers@6.0.2': {} + + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.0': {} + + '@csstools/css-tokenizer@4.0.0': {} + '@cypress/request-promise@5.0.0(@cypress/request@3.0.10)(@cypress/request@3.0.10)': dependencies: '@cypress/request': 3.0.10 @@ -8197,6 +8638,10 @@ snapshots: '@eshaz/web-worker@1.2.2': optional: true + '@exodus/bytes@1.15.0(@noble/hashes@2.0.1)': + optionalDependencies: + '@noble/hashes': 2.0.1 + '@google/genai@1.44.0': dependencies: google-auth-library: 10.6.1 @@ -8602,7 +9047,7 @@ snapshots: openai: 6.26.0(ws@8.19.0)(zod@4.3.6) partial-json: 0.1.7 proxy-agent: 6.5.0 - undici: 7.22.0 + undici: 7.24.0 zod-to-json-schema: 3.25.1(zod@4.3.6) transitivePeerDependencies: - '@modelcontextprotocol/sdk' @@ -8632,7 +9077,7 @@ snapshots: minimatch: 10.2.4 proper-lockfile: 4.1.2 strip-ansi: 7.2.0 - undici: 7.22.0 + undici: 7.24.0 yaml: 2.8.2 optionalDependencies: '@mariozechner/clipboard': 0.3.2 @@ -9197,63 +9642,65 @@ snapshots: '@opentelemetry/semantic-conventions@1.40.0': {} + '@oxc-project/runtime@0.115.0': {} + '@oxc-project/types@0.115.0': {} - '@oxfmt/binding-android-arm-eabi@0.38.0': + '@oxfmt/binding-android-arm-eabi@0.40.0': optional: true - '@oxfmt/binding-android-arm64@0.38.0': + '@oxfmt/binding-android-arm64@0.40.0': optional: true - '@oxfmt/binding-darwin-arm64@0.38.0': + '@oxfmt/binding-darwin-arm64@0.40.0': optional: true - '@oxfmt/binding-darwin-x64@0.38.0': + '@oxfmt/binding-darwin-x64@0.40.0': optional: true - '@oxfmt/binding-freebsd-x64@0.38.0': + '@oxfmt/binding-freebsd-x64@0.40.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.38.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.38.0': + '@oxfmt/binding-linux-arm-musleabihf@0.40.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.38.0': + '@oxfmt/binding-linux-arm64-gnu@0.40.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.38.0': + '@oxfmt/binding-linux-arm64-musl@0.40.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.38.0': + '@oxfmt/binding-linux-ppc64-gnu@0.40.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.38.0': + '@oxfmt/binding-linux-riscv64-gnu@0.40.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.38.0': + '@oxfmt/binding-linux-riscv64-musl@0.40.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.38.0': + '@oxfmt/binding-linux-s390x-gnu@0.40.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.38.0': + '@oxfmt/binding-linux-x64-gnu@0.40.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.38.0': + '@oxfmt/binding-linux-x64-musl@0.40.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.38.0': + '@oxfmt/binding-openharmony-arm64@0.40.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.38.0': + '@oxfmt/binding-win32-arm64-msvc@0.40.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.38.0': + '@oxfmt/binding-win32-ia32-msvc@0.40.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.38.0': + '@oxfmt/binding-win32-x64-msvc@0.40.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.16.0': @@ -9274,61 +9721,61 @@ snapshots: '@oxlint-tsgolint/win32-x64@0.16.0': optional: true - '@oxlint/binding-android-arm-eabi@1.53.0': + '@oxlint/binding-android-arm-eabi@1.55.0': optional: true - '@oxlint/binding-android-arm64@1.53.0': + '@oxlint/binding-android-arm64@1.55.0': optional: true - '@oxlint/binding-darwin-arm64@1.53.0': + '@oxlint/binding-darwin-arm64@1.55.0': optional: true - '@oxlint/binding-darwin-x64@1.53.0': + '@oxlint/binding-darwin-x64@1.55.0': optional: true - '@oxlint/binding-freebsd-x64@1.53.0': + '@oxlint/binding-freebsd-x64@1.55.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.53.0': + '@oxlint/binding-linux-arm-gnueabihf@1.55.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.53.0': + '@oxlint/binding-linux-arm-musleabihf@1.55.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.53.0': + '@oxlint/binding-linux-arm64-gnu@1.55.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.53.0': + '@oxlint/binding-linux-arm64-musl@1.55.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.53.0': + '@oxlint/binding-linux-ppc64-gnu@1.55.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.53.0': + '@oxlint/binding-linux-riscv64-gnu@1.55.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.53.0': + '@oxlint/binding-linux-riscv64-musl@1.55.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.53.0': + '@oxlint/binding-linux-s390x-gnu@1.55.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.53.0': + '@oxlint/binding-linux-x64-gnu@1.55.0': optional: true - '@oxlint/binding-linux-x64-musl@1.53.0': + '@oxlint/binding-linux-x64-musl@1.55.0': optional: true - '@oxlint/binding-openharmony-arm64@1.53.0': + '@oxlint/binding-openharmony-arm64@1.55.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.53.0': + '@oxlint/binding-win32-arm64-msvc@1.55.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.53.0': + '@oxlint/binding-win32-ia32-msvc@1.55.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.53.0': + '@oxlint/binding-win32-x64-msvc@1.55.0': optional: true '@pierre/diffs@1.0.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -9462,81 +9909,6 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.9': {} - '@rollup/rollup-android-arm-eabi@4.59.0': - optional: true - - '@rollup/rollup-android-arm64@4.59.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.59.0': - optional: true - - '@rollup/rollup-darwin-x64@4.59.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.59.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.59.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.59.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.59.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.59.0': - optional: true - - '@rollup/rollup-openbsd-x64@4.59.0': - optional: true - - '@rollup/rollup-openharmony-arm64@4.59.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.59.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.59.0': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.59.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.59.0': - optional: true - '@scure/base@2.0.0': {} '@scure/bip32@2.0.1': @@ -9618,14 +9990,14 @@ snapshots: '@slack/logger@4.0.0': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@slack/oauth@3.0.4': dependencies: '@slack/logger': 4.0.0 '@slack/web-api': 7.14.1 '@types/jsonwebtoken': 9.0.10 - '@types/node': 25.4.0 + '@types/node': 25.5.0 jsonwebtoken: 9.0.3 transitivePeerDependencies: - debug @@ -9634,7 +10006,7 @@ snapshots: dependencies: '@slack/logger': 4.0.0 '@slack/web-api': 7.14.1 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/ws': 8.18.1 eventemitter3: 5.0.4 ws: 8.19.0 @@ -9649,7 +10021,7 @@ snapshots: dependencies: '@slack/logger': 4.0.0 '@slack/types': 2.20.0 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/retry': 0.12.0 axios: 1.13.5 eventemitter3: 5.0.4 @@ -9672,6 +10044,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/abort-controller@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/chunked-blob-reader-native@4.2.2': dependencies: '@smithy/util-base64': 4.3.1 @@ -9690,6 +10067,15 @@ snapshots: '@smithy/util-middleware': 4.2.11 tslib: 2.8.1 + '@smithy/config-resolver@4.4.11': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-endpoints': 3.3.3 + '@smithy/util-middleware': 4.2.12 + tslib: 2.8.1 + '@smithy/config-resolver@4.4.9': dependencies: '@smithy/node-config-provider': 4.3.10 @@ -9699,6 +10085,19 @@ snapshots: '@smithy/util-middleware': 4.2.10 tslib: 2.8.1 + '@smithy/core@3.23.11': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-stream': 4.5.19 + '@smithy/util-utf8': 4.2.2 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + '@smithy/core@3.23.6': dependencies: '@smithy/middleware-serde': 4.2.11 @@ -9741,6 +10140,14 @@ snapshots: '@smithy/url-parser': 4.2.11 tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.12': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + tslib: 2.8.1 + '@smithy/eventstream-codec@4.2.10': dependencies: '@aws-crypto/crc32': 5.2.0 @@ -9817,6 +10224,14 @@ snapshots: '@smithy/util-base64': 4.3.2 tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.15': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/querystring-builder': 4.2.12 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + tslib: 2.8.1 + '@smithy/hash-blob-browser@4.2.11': dependencies: '@smithy/chunked-blob-reader': 5.2.1 @@ -9838,6 +10253,13 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@smithy/hash-node@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/hash-stream-node@4.2.10': dependencies: '@smithy/types': 4.13.0 @@ -9854,6 +10276,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/invalid-dependency@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 @@ -9884,6 +10311,12 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/middleware-content-length@4.2.12': + dependencies: + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/middleware-endpoint@4.4.20': dependencies: '@smithy/core': 3.23.6 @@ -9906,6 +10339,17 @@ snapshots: '@smithy/util-middleware': 4.2.11 tslib: 2.8.1 + '@smithy/middleware-endpoint@4.4.25': + dependencies: + '@smithy/core': 3.23.11 + '@smithy/middleware-serde': 4.2.14 + '@smithy/node-config-provider': 4.3.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + '@smithy/url-parser': 4.2.12 + '@smithy/util-middleware': 4.2.12 + tslib: 2.8.1 + '@smithy/middleware-retry@4.4.37': dependencies: '@smithy/node-config-provider': 4.3.10 @@ -9930,6 +10374,18 @@ snapshots: '@smithy/uuid': 1.1.2 tslib: 2.8.1 + '@smithy/middleware-retry@4.4.42': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/service-error-classification': 4.2.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-retry': 4.2.12 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + '@smithy/middleware-serde@4.2.11': dependencies: '@smithy/protocol-http': 5.3.10 @@ -9942,6 +10398,13 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/middleware-serde@4.2.14': + dependencies: + '@smithy/core': 3.23.11 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/middleware-stack@4.2.10': dependencies: '@smithy/types': 4.13.0 @@ -9952,6 +10415,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/middleware-stack@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/node-config-provider@4.3.10': dependencies: '@smithy/property-provider': 4.2.10 @@ -9966,6 +10434,13 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/node-config-provider@4.3.12': + dependencies: + '@smithy/property-provider': 4.2.12 + '@smithy/shared-ini-file-loader': 4.4.7 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/node-http-handler@4.4.12': dependencies: '@smithy/abort-controller': 4.2.10 @@ -9982,6 +10457,14 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/node-http-handler@4.4.16': + dependencies: + '@smithy/abort-controller': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/querystring-builder': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/property-provider@4.2.10': dependencies: '@smithy/types': 4.13.0 @@ -9992,6 +10475,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/property-provider@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/protocol-http@5.3.10': dependencies: '@smithy/types': 4.13.0 @@ -10002,6 +10490,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/protocol-http@5.3.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/querystring-builder@4.2.10': dependencies: '@smithy/types': 4.13.0 @@ -10014,6 +10507,12 @@ snapshots: '@smithy/util-uri-escape': 4.2.2 tslib: 2.8.1 + '@smithy/querystring-builder@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/util-uri-escape': 4.2.2 + tslib: 2.8.1 + '@smithy/querystring-parser@4.2.10': dependencies: '@smithy/types': 4.13.0 @@ -10024,6 +10523,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/querystring-parser@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/service-error-classification@4.2.10': dependencies: '@smithy/types': 4.13.0 @@ -10032,6 +10536,10 @@ snapshots: dependencies: '@smithy/types': 4.13.0 + '@smithy/service-error-classification@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + '@smithy/shared-ini-file-loader@4.4.5': dependencies: '@smithy/types': 4.13.0 @@ -10042,6 +10550,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/shared-ini-file-loader@4.4.7': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/signature-v4@5.3.10': dependencies: '@smithy/is-array-buffer': 4.2.1 @@ -10064,6 +10577,17 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@smithy/signature-v4@5.3.12': + dependencies: + '@smithy/is-array-buffer': 4.2.2 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-middleware': 4.2.12 + '@smithy/util-uri-escape': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/smithy-client@4.12.0': dependencies: '@smithy/core': 3.23.6 @@ -10084,10 +10608,24 @@ snapshots: '@smithy/util-stream': 4.5.17 tslib: 2.8.1 + '@smithy/smithy-client@4.12.5': + dependencies: + '@smithy/core': 3.23.11 + '@smithy/middleware-endpoint': 4.4.25 + '@smithy/middleware-stack': 4.2.12 + '@smithy/protocol-http': 5.3.12 + '@smithy/types': 4.13.1 + '@smithy/util-stream': 4.5.19 + tslib: 2.8.1 + '@smithy/types@4.13.0': dependencies: tslib: 2.8.1 + '@smithy/types@4.13.1': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@4.2.10': dependencies: '@smithy/querystring-parser': 4.2.10 @@ -10100,6 +10638,12 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/url-parser@4.2.12': + dependencies: + '@smithy/querystring-parser': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-base64@4.3.1': dependencies: '@smithy/util-buffer-from': 4.2.1 @@ -10165,6 +10709,13 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@4.3.41': + dependencies: + '@smithy/property-provider': 4.2.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.39': dependencies: '@smithy/config-resolver': 4.4.9 @@ -10185,6 +10736,16 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.44': + dependencies: + '@smithy/config-resolver': 4.4.11 + '@smithy/credential-provider-imds': 4.2.12 + '@smithy/node-config-provider': 4.3.12 + '@smithy/property-provider': 4.2.12 + '@smithy/smithy-client': 4.12.5 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-endpoints@3.3.1': dependencies: '@smithy/node-config-provider': 4.3.10 @@ -10197,6 +10758,12 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/util-endpoints@3.3.3': + dependencies: + '@smithy/node-config-provider': 4.3.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-hex-encoding@4.2.1': dependencies: tslib: 2.8.1 @@ -10215,6 +10782,11 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/util-middleware@4.2.12': + dependencies: + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-retry@4.2.10': dependencies: '@smithy/service-error-classification': 4.2.10 @@ -10227,6 +10799,12 @@ snapshots: '@smithy/types': 4.13.0 tslib: 2.8.1 + '@smithy/util-retry@4.2.12': + dependencies: + '@smithy/service-error-classification': 4.2.12 + '@smithy/types': 4.13.1 + tslib: 2.8.1 + '@smithy/util-stream@4.5.15': dependencies: '@smithy/fetch-http-handler': 5.3.11 @@ -10249,6 +10827,17 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@smithy/util-stream@4.5.19': + dependencies: + '@smithy/fetch-http-handler': 5.3.15 + '@smithy/node-http-handler': 4.4.16 + '@smithy/types': 4.13.1 + '@smithy/util-base64': 4.3.2 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/util-uri-escape@4.2.1': dependencies: tslib: 2.8.1 @@ -10474,7 +11063,7 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/bun@1.3.9': dependencies: @@ -10494,7 +11083,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/deep-eql@4.0.2': {} @@ -10502,14 +11091,14 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -10538,7 +11127,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/linkify-it@5.0.0': {} @@ -10571,7 +11160,7 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/node@25.4.0': + '@types/node@25.5.0': dependencies: undici-types: 7.18.2 @@ -10584,7 +11173,7 @@ snapshots: '@types/request@2.48.13': dependencies: '@types/caseless': 0.12.5 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/tough-cookie': 4.0.5 form-data: 2.5.4 @@ -10595,22 +11184,22 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/send@1.2.1': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/tough-cookie@4.0.5': {} @@ -10620,43 +11209,43 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 optional: true - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260311.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260311.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260311.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260311.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260311.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260311.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260311.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260312.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260311.1': + '@typescript/native-preview@7.0.0-dev.20260312.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260311.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260311.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260311.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260311.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260311.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260311.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260311.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260312.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260312.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260312.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260312.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260312.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260312.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260312.1 '@typespec/ts-http-runtime@0.3.3': dependencies: @@ -10697,29 +11286,29 @@ snapshots: - '@cypress/request' - supports-color - '@vitest/browser-playwright@4.0.18(playwright@1.58.2)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': + '@vitest/browser-playwright@4.1.0(playwright@1.58.2)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: - '@vitest/browser': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/browser': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + '@vitest/mocker': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) playwright: 1.58.2 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.0 + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': + '@vitest/browser@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/utils': 4.0.18 + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/utils': 4.1.0 magic-string: 0.30.21 - pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.0 + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) ws: 8.19.0 transitivePeerDependencies: - bufferutil @@ -10727,60 +11316,62 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@4.0.18(@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18)': + '@vitest/coverage-v8@4.1.0(@vitest/browser@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0))(vitest@4.1.0)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.11 + '@vitest/utils': 4.1.0 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) optionalDependencies: - '@vitest/browser': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + '@vitest/browser': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) - '@vitest/expect@4.0.18': + '@vitest/expect@4.1.0': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/pretty-format@4.0.18': + '@vitest/pretty-format@4.1.0': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/runner@4.0.18': + '@vitest/runner@4.1.0': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.0 pathe: 2.0.3 - '@vitest/snapshot@4.0.18': + '@vitest/snapshot@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.0 + '@vitest/utils': 4.1.0 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.18': {} + '@vitest/spy@4.1.0': {} - '@vitest/utils@4.0.18': + '@vitest/utils@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 - tinyrainbow: 3.0.3 + '@vitest/pretty-format': 4.1.0 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@wasm-audio-decoders/common@9.0.7': dependencies: @@ -10812,7 +11403,7 @@ snapshots: async-mutex: 0.5.0 libsignal: '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67' lru-cache: 11.2.6 - music-metadata: 11.12.1 + music-metadata: 11.12.3 p-queue: 9.1.0 pino: 9.14.0 protobufjs: 7.5.4 @@ -10855,7 +11446,7 @@ snapshots: acorn@8.16.0: {} - acpx@0.2.0(zod@4.3.6): + acpx@0.3.0(zod@4.3.6): dependencies: '@agentclientprotocol/sdk': 0.15.0(zod@4.3.6) commander: 14.0.3 @@ -10959,7 +11550,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.11: + ast-v8-to-istanbul@1.0.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -11066,6 +11657,10 @@ snapshots: before-after-hook@4.0.0: {} + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + big-integer@1.6.52: {} bignumber.js@9.3.1: {} @@ -11139,7 +11734,7 @@ snapshots: bun-types@1.3.9: dependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 optional: true bytes@3.1.2: {} @@ -11306,6 +11901,8 @@ snapshots: content-type@1.0.5: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.7: {} cookie-signature@1.2.2: {} @@ -11334,10 +11931,22 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + css-what@6.2.2: {} cssom@0.5.0: {} + cssstyle@6.2.0: + dependencies: + '@asamuzakjp/css-color': 5.0.1 + '@csstools/css-syntax-patches-for-csstree': 1.1.0 + css-tree: 3.2.1 + lru-cache: 11.2.6 + curve25519-js@0.0.4: {} dashdash@1.14.1: @@ -11348,6 +11957,13 @@ snapshots: data-uri-to-buffer@6.0.2: {} + data-urls@7.0.0(@noble/hashes@2.0.1): + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@2.0.1) + transitivePeerDependencies: + - '@noble/hashes' + date-fns@3.6.0: {} debug@2.6.9: @@ -11358,6 +11974,8 @@ snapshots: dependencies: ms: 2.1.3 + decimal.js@10.6.0: {} + deep-extend@0.6.0: {} deepmerge@4.3.1: {} @@ -11456,6 +12074,8 @@ snapshots: entities@4.5.0: {} + entities@6.0.1: {} + entities@7.0.1: {} env-var@7.5.0: {} @@ -11464,7 +12084,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: dependencies: @@ -11967,6 +12587,12 @@ snapshots: dependencies: lru-cache: 11.2.6 + html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1): + dependencies: + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) + transitivePeerDependencies: + - '@noble/hashes' + html-escaper@2.0.2: {} html-escaper@3.0.3: {} @@ -12147,6 +12773,8 @@ snapshots: is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-promise@2.2.2: {} is-promise@4.0.0: {} @@ -12220,6 +12848,33 @@ snapshots: gitignore-to-glob: 0.3.0 jscpd-sarif-reporter: 4.0.6 + jsdom@28.1.0(@noble/hashes@2.0.1): + dependencies: + '@acemir/cssom': 0.9.31 + '@asamuzakjp/dom-selector': 6.8.1 + '@bramus/specificity': 2.4.2 + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) + cssstyle: 6.2.0 + data-urls: 7.0.0(@noble/hashes@2.0.1) + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0(@noble/hashes@2.0.1) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + undici: 7.24.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@2.0.1) + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - '@noble/hashes' + - supports-color + jsesc@3.1.0: {} json-bigint@1.0.0: @@ -12323,55 +12978,54 @@ snapshots: lifecycle-utils@3.1.1: {} - lightningcss-android-arm64@1.30.2: + lightningcss-android-arm64@1.32.0: optional: true - lightningcss-darwin-arm64@1.30.2: + lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.30.2: + lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.30.2: + lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.30.2: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.30.2: + lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.30.2: + lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.30.2: + lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.30.2: + lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.30.2: + lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.30.2: + lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.30.2: + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 - optional: true + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 limiter@1.1.5: {} @@ -12519,6 +13173,8 @@ snapshots: unist-util-visit: 5.1.0 vfile: 6.0.3 + mdn-data@2.27.1: {} + mdurl@2.0.0: {} media-typer@0.3.0: {} @@ -12614,9 +13270,9 @@ snapshots: ms@2.1.3: {} - music-metadata@11.12.1: + music-metadata@11.12.3: dependencies: - '@borewit/text-codec': 0.2.1 + '@borewit/text-codec': 0.2.2 '@tokenizer/token': 0.3.0 content-type: 1.0.5 debug: 4.4.3 @@ -12933,29 +13589,29 @@ snapshots: osc-progress@0.3.0: {} - oxfmt@0.38.0: + oxfmt@0.40.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.38.0 - '@oxfmt/binding-android-arm64': 0.38.0 - '@oxfmt/binding-darwin-arm64': 0.38.0 - '@oxfmt/binding-darwin-x64': 0.38.0 - '@oxfmt/binding-freebsd-x64': 0.38.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.38.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.38.0 - '@oxfmt/binding-linux-arm64-gnu': 0.38.0 - '@oxfmt/binding-linux-arm64-musl': 0.38.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.38.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.38.0 - '@oxfmt/binding-linux-riscv64-musl': 0.38.0 - '@oxfmt/binding-linux-s390x-gnu': 0.38.0 - '@oxfmt/binding-linux-x64-gnu': 0.38.0 - '@oxfmt/binding-linux-x64-musl': 0.38.0 - '@oxfmt/binding-openharmony-arm64': 0.38.0 - '@oxfmt/binding-win32-arm64-msvc': 0.38.0 - '@oxfmt/binding-win32-ia32-msvc': 0.38.0 - '@oxfmt/binding-win32-x64-msvc': 0.38.0 + '@oxfmt/binding-android-arm-eabi': 0.40.0 + '@oxfmt/binding-android-arm64': 0.40.0 + '@oxfmt/binding-darwin-arm64': 0.40.0 + '@oxfmt/binding-darwin-x64': 0.40.0 + '@oxfmt/binding-freebsd-x64': 0.40.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.40.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.40.0 + '@oxfmt/binding-linux-arm64-gnu': 0.40.0 + '@oxfmt/binding-linux-arm64-musl': 0.40.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.40.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.40.0 + '@oxfmt/binding-linux-riscv64-musl': 0.40.0 + '@oxfmt/binding-linux-s390x-gnu': 0.40.0 + '@oxfmt/binding-linux-x64-gnu': 0.40.0 + '@oxfmt/binding-linux-x64-musl': 0.40.0 + '@oxfmt/binding-openharmony-arm64': 0.40.0 + '@oxfmt/binding-win32-arm64-msvc': 0.40.0 + '@oxfmt/binding-win32-ia32-msvc': 0.40.0 + '@oxfmt/binding-win32-x64-msvc': 0.40.0 oxlint-tsgolint@0.16.0: optionalDependencies: @@ -12966,27 +13622,27 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 0.16.0 '@oxlint-tsgolint/win32-x64': 0.16.0 - oxlint@1.53.0(oxlint-tsgolint@0.16.0): + oxlint@1.55.0(oxlint-tsgolint@0.16.0): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.53.0 - '@oxlint/binding-android-arm64': 1.53.0 - '@oxlint/binding-darwin-arm64': 1.53.0 - '@oxlint/binding-darwin-x64': 1.53.0 - '@oxlint/binding-freebsd-x64': 1.53.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.53.0 - '@oxlint/binding-linux-arm-musleabihf': 1.53.0 - '@oxlint/binding-linux-arm64-gnu': 1.53.0 - '@oxlint/binding-linux-arm64-musl': 1.53.0 - '@oxlint/binding-linux-ppc64-gnu': 1.53.0 - '@oxlint/binding-linux-riscv64-gnu': 1.53.0 - '@oxlint/binding-linux-riscv64-musl': 1.53.0 - '@oxlint/binding-linux-s390x-gnu': 1.53.0 - '@oxlint/binding-linux-x64-gnu': 1.53.0 - '@oxlint/binding-linux-x64-musl': 1.53.0 - '@oxlint/binding-openharmony-arm64': 1.53.0 - '@oxlint/binding-win32-arm64-msvc': 1.53.0 - '@oxlint/binding-win32-ia32-msvc': 1.53.0 - '@oxlint/binding-win32-x64-msvc': 1.53.0 + '@oxlint/binding-android-arm-eabi': 1.55.0 + '@oxlint/binding-android-arm64': 1.55.0 + '@oxlint/binding-darwin-arm64': 1.55.0 + '@oxlint/binding-darwin-x64': 1.55.0 + '@oxlint/binding-freebsd-x64': 1.55.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.55.0 + '@oxlint/binding-linux-arm-musleabihf': 1.55.0 + '@oxlint/binding-linux-arm64-gnu': 1.55.0 + '@oxlint/binding-linux-arm64-musl': 1.55.0 + '@oxlint/binding-linux-ppc64-gnu': 1.55.0 + '@oxlint/binding-linux-riscv64-gnu': 1.55.0 + '@oxlint/binding-linux-riscv64-musl': 1.55.0 + '@oxlint/binding-linux-s390x-gnu': 1.55.0 + '@oxlint/binding-linux-x64-gnu': 1.55.0 + '@oxlint/binding-linux-x64-musl': 1.55.0 + '@oxlint/binding-openharmony-arm64': 1.55.0 + '@oxlint/binding-win32-arm64-msvc': 1.55.0 + '@oxlint/binding-win32-ia32-msvc': 1.55.0 + '@oxlint/binding-win32-x64-msvc': 1.55.0 oxlint-tsgolint: 0.16.0 p-finally@1.0.0: {} @@ -13050,6 +13706,10 @@ snapshots: parse5@6.0.1: {} + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseley@0.12.1: dependencies: leac: 0.6.0 @@ -13121,10 +13781,6 @@ snapshots: sonic-boom: 4.2.1 thread-stream: 3.1.0 - pixelmatch@7.1.0: - dependencies: - pngjs: 7.0.0 - playwright-core@1.58.2: {} playwright@1.58.2: @@ -13141,6 +13797,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres@3.4.8: {} pretty-bytes@6.1.1: {} @@ -13202,7 +13864,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 25.4.0 + '@types/node': 25.5.0 long: 5.3.2 proxy-addr@2.0.7: @@ -13441,7 +14103,7 @@ snapshots: dependencies: glob: 10.5.0 - rolldown-plugin-dts@0.22.5(@typescript/native-preview@7.0.0-dev.20260311.1)(rolldown@1.0.0-rc.9)(typescript@5.9.3): + rolldown-plugin-dts@0.22.5(@typescript/native-preview@7.0.0-dev.20260312.1)(rolldown@1.0.0-rc.9)(typescript@5.9.3): dependencies: '@babel/generator': 8.0.0-rc.2 '@babel/helper-validator-identifier': 8.0.0-rc.2 @@ -13454,7 +14116,7 @@ snapshots: obug: 2.1.1 rolldown: 1.0.0-rc.9 optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260311.1 + '@typescript/native-preview': 7.0.0-dev.20260312.1 typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver @@ -13480,37 +14142,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 - rollup@4.59.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.59.0 - '@rollup/rollup-android-arm64': 4.59.0 - '@rollup/rollup-darwin-arm64': 4.59.0 - '@rollup/rollup-darwin-x64': 4.59.0 - '@rollup/rollup-freebsd-arm64': 4.59.0 - '@rollup/rollup-freebsd-x64': 4.59.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 - '@rollup/rollup-linux-arm-musleabihf': 4.59.0 - '@rollup/rollup-linux-arm64-gnu': 4.59.0 - '@rollup/rollup-linux-arm64-musl': 4.59.0 - '@rollup/rollup-linux-loong64-gnu': 4.59.0 - '@rollup/rollup-linux-loong64-musl': 4.59.0 - '@rollup/rollup-linux-ppc64-gnu': 4.59.0 - '@rollup/rollup-linux-ppc64-musl': 4.59.0 - '@rollup/rollup-linux-riscv64-gnu': 4.59.0 - '@rollup/rollup-linux-riscv64-musl': 4.59.0 - '@rollup/rollup-linux-s390x-gnu': 4.59.0 - '@rollup/rollup-linux-x64-gnu': 4.59.0 - '@rollup/rollup-linux-x64-musl': 4.59.0 - '@rollup/rollup-openbsd-x64': 4.59.0 - '@rollup/rollup-openharmony-arm64': 4.59.0 - '@rollup/rollup-win32-arm64-msvc': 4.59.0 - '@rollup/rollup-win32-ia32-msvc': 4.59.0 - '@rollup/rollup-win32-x64-gnu': 4.59.0 - '@rollup/rollup-win32-x64-msvc': 4.59.0 - fsevents: 2.3.3 - router@2.2.0: dependencies: debug: 4.4.3 @@ -13542,6 +14173,10 @@ snapshots: parse-srcset: 1.0.2 postcss: 8.5.6 + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.27.0: {} selderee@0.11.0: @@ -13817,6 +14452,8 @@ snapshots: std-env@3.10.0: {} + std-env@4.0.0: {} + stdin-discarder@0.3.1: {} stdout-update@4.0.1: @@ -13904,6 +14541,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + symbol-tree@3.2.4: {} + table-layout@4.1.1: dependencies: array-back: 6.2.2 @@ -13964,7 +14603,7 @@ snapshots: tinypool@2.1.0: {} - tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} to-regex-range@5.0.1: dependencies: @@ -13978,7 +14617,7 @@ snapshots: token-types@6.1.2: dependencies: - '@borewit/text-codec': 0.2.1 + '@borewit/text-codec': 0.2.2 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -13993,13 +14632,17 @@ snapshots: tr46@0.0.3: {} + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + tree-kill@1.2.2: {} trim-lines@3.0.1: {} ts-algebra@2.0.0: {} - tsdown@0.21.2(@typescript/native-preview@7.0.0-dev.20260311.1)(typescript@5.9.3): + tsdown@0.21.2(@typescript/native-preview@7.0.0-dev.20260312.1)(typescript@5.9.3): dependencies: ansis: 4.2.0 cac: 7.0.0 @@ -14010,7 +14653,7 @@ snapshots: obug: 2.1.1 picomatch: 4.0.3 rolldown: 1.0.0-rc.9 - rolldown-plugin-dts: 0.22.5(@typescript/native-preview@7.0.0-dev.20260311.1)(rolldown@1.0.0-rc.9)(typescript@5.9.3) + rolldown-plugin-dts: 0.22.5(@typescript/native-preview@7.0.0-dev.20260312.1)(rolldown@1.0.0-rc.9)(typescript@5.9.3) semver: 7.7.4 tinyexec: 1.0.2 tinyglobby: 0.2.15 @@ -14081,6 +14724,8 @@ snapshots: undici@7.22.0: {} + undici@7.24.0: {} + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -14155,67 +14800,74 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) + '@oxc-project/runtime': 0.115.0 + lightningcss: 1.32.0 picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.59.0 + postcss: 8.5.8 + rolldown: 1.0.0-rc.9 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.4.0 + '@types/node': 25.5.0 + esbuild: 0.27.3 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.30.2 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + 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.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.0 + vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.4.0 - '@vitest/browser-playwright': 4.0.18(playwright@1.58.2)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + '@types/node': 25.5.0 + '@vitest/browser-playwright': 4.1.0(playwright@1.58.2)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) + jsdom: 28.1.0(@noble/hashes@2.0.1) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml void-elements@3.1.0: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} + webidl-conversions@8.0.1: {} + + whatwg-mimetype@5.0.0: {} + + whatwg-url@16.0.1(@noble/hashes@2.0.1): + dependencies: + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -14266,6 +14918,10 @@ snapshots: ws@8.19.0: {} + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + y18n@5.0.8: {} yallist@4.0.0: {} diff --git a/src/cli/update-cli.test.ts b/src/cli/update-cli.test.ts index 683edaa8d37..d1713ee0e4c 100644 --- a/src/cli/update-cli.test.ts +++ b/src/cli/update-cli.test.ts @@ -512,13 +512,15 @@ describe("update-cli", () => { call[0][1] === "i" && call[0][2] === "-g", ); - const mergedPath = updateCall?.[1]?.env?.Path ?? updateCall?.[1]?.env?.PATH ?? ""; + const updateOptions = + typeof updateCall?.[1] === "object" && updateCall[1] !== null ? updateCall[1] : undefined; + const mergedPath = updateOptions?.env?.Path ?? updateOptions?.env?.PATH ?? ""; expect(mergedPath.split(path.delimiter).slice(0, 2)).toEqual([ portableGitMingw, portableGitUsr, ]); - expect(updateCall?.[1]?.env?.NPM_CONFIG_SCRIPT_SHELL).toBe("cmd.exe"); - expect(updateCall?.[1]?.env?.NODE_LLAMA_CPP_SKIP_DOWNLOAD).toBe("1"); + expect(updateOptions?.env?.NPM_CONFIG_SCRIPT_SHELL).toBe("cmd.exe"); + expect(updateOptions?.env?.NODE_LLAMA_CPP_SKIP_DOWNLOAD).toBe("1"); }); it("uses OPENCLAW_UPDATE_PACKAGE_SPEC for package updates", async () => { diff --git a/src/cron/isolated-agent.delivery.test-helpers.ts b/src/cron/isolated-agent.delivery.test-helpers.ts index de4caee3a3c..041f5750a95 100644 --- a/src/cron/isolated-agent.delivery.test-helpers.ts +++ b/src/cron/isolated-agent.delivery.test-helpers.ts @@ -6,12 +6,14 @@ import { makeCfg, makeJob } from "./isolated-agent.test-harness.js"; export function createCliDeps(overrides: Partial = {}): CliDeps { return { - sendMessageSlack: vi.fn(), - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), + sendMessageSlack: vi.fn().mockResolvedValue({ messageTs: "slack-1", channel: "C1" }), + sendMessageWhatsApp: vi + .fn() + .mockResolvedValue({ messageId: "wa-1", toJid: "123@s.whatsapp.net" }), + sendMessageTelegram: vi.fn().mockResolvedValue({ messageId: "tg-1", chatId: "123" }), + sendMessageDiscord: vi.fn().mockResolvedValue({ messageId: "discord-1", channelId: "123" }), + sendMessageSignal: vi.fn().mockResolvedValue({ messageId: "signal-1", conversationId: "123" }), + sendMessageIMessage: vi.fn().mockResolvedValue({ messageId: "imessage-1", chatId: "123" }), ...overrides, }; } diff --git a/src/cron/isolated-agent.direct-delivery-forum-topics.test.ts b/src/cron/isolated-agent.direct-delivery-forum-topics.test.ts index 836369fedb6..0ee64e789fc 100644 --- a/src/cron/isolated-agent.direct-delivery-forum-topics.test.ts +++ b/src/cron/isolated-agent.direct-delivery-forum-topics.test.ts @@ -1,5 +1,5 @@ import "./isolated-agent.mocks.js"; -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it } from "vitest"; import { runSubagentAnnounceFlow } from "../agents/subagent-announce.js"; import { createCliDeps, @@ -15,7 +15,7 @@ describe("runCronIsolatedAgentTurn forum topic delivery", () => { setupIsolatedAgentTurnMocks(); }); - it("routes forum-topic and plain telegram targets through the correct delivery path", async () => { + it("routes forum-topic telegram targets through the correct delivery path", async () => { await withTempCronHome(async (home) => { const storePath = await writeSessionStore(home, { lastProvider: "webchat", lastTo: "" }); const deps = createCliDeps(); @@ -36,8 +36,13 @@ describe("runCronIsolatedAgentTurn forum topic delivery", () => { text: "forum message", messageThreadId: 42, }); + }); + }); - vi.clearAllMocks(); + it("routes plain telegram targets through the correct delivery path", async () => { + await withTempCronHome(async (home) => { + const storePath = await writeSessionStore(home, { lastProvider: "webchat", lastTo: "" }); + const deps = createCliDeps(); mockAgentPayloads([{ text: "plain message" }]); const plainRes = await runTelegramAnnounceTurn({ diff --git a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts index 52a3c1328f9..43fe8c5d688 100644 --- a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts +++ b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts @@ -197,7 +197,7 @@ describe("runCronIsolatedAgentTurn", () => { setupIsolatedAgentTurnMocks(); }); - it("delivers explicit targets with direct and final-payload text", async () => { + it("delivers explicit targets directly", async () => { await withTelegramAnnounceFixture(async ({ home, storePath, deps }) => { await assertExplicitTelegramTargetDelivery({ home, @@ -206,7 +206,11 @@ describe("runCronIsolatedAgentTurn", () => { payloads: [{ text: "hello from cron" }], expectedText: "hello from cron", }); - vi.clearAllMocks(); + }); + }); + + it("delivers explicit targets with final payload text", async () => { + await withTelegramAnnounceFixture(async ({ home, storePath, deps }) => { await assertExplicitTelegramTargetDelivery({ home, storePath, diff --git a/src/cron/isolated-agent/run.test-harness.ts b/src/cron/isolated-agent/run.test-harness.ts index 6a1fa1c3dff..74b5eed43e1 100644 --- a/src/cron/isolated-agent/run.test-harness.ts +++ b/src/cron/isolated-agent/run.test-harness.ts @@ -46,31 +46,51 @@ export const pickLastNonEmptyTextFromPayloadsMock = createMock(); export const resolveCronDeliveryPlanMock = createMock(); export const resolveDeliveryTargetMock = createMock(); -vi.mock("../../agents/agent-scope.js", () => ({ - resolveAgentConfig: resolveAgentConfigMock, - resolveAgentDir: vi.fn().mockReturnValue("/tmp/agent-dir"), - resolveAgentModelFallbacksOverride: resolveAgentModelFallbacksOverrideMock, - resolveAgentWorkspaceDir: vi.fn().mockReturnValue("/tmp/workspace"), - resolveDefaultAgentId: vi.fn().mockReturnValue("default"), - resolveAgentSkillsFilter: resolveAgentSkillsFilterMock, -})); +vi.mock("../../agents/agent-scope.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + resolveAgentConfig: resolveAgentConfigMock, + resolveAgentDir: vi.fn().mockReturnValue("/tmp/agent-dir"), + resolveAgentModelFallbacksOverride: resolveAgentModelFallbacksOverrideMock, + resolveAgentWorkspaceDir: vi.fn().mockReturnValue("/tmp/workspace"), + resolveDefaultAgentId: vi.fn().mockReturnValue("default"), + resolveAgentSkillsFilter: resolveAgentSkillsFilterMock, + }; +}); -vi.mock("../../agents/skills.js", () => ({ - buildWorkspaceSkillSnapshot: buildWorkspaceSkillSnapshotMock, -})); +vi.mock("../../agents/skills.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + buildWorkspaceSkillSnapshot: buildWorkspaceSkillSnapshotMock, + }; +}); -vi.mock("../../agents/skills/refresh.js", () => ({ - getSkillsSnapshotVersion: vi.fn().mockReturnValue(42), -})); +vi.mock("../../agents/skills/refresh.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getSkillsSnapshotVersion: vi.fn().mockReturnValue(42), + }; +}); -vi.mock("../../agents/workspace.js", () => ({ - DEFAULT_IDENTITY_FILENAME: "IDENTITY.md", - ensureAgentWorkspace: vi.fn().mockResolvedValue({ dir: "/tmp/workspace" }), -})); +vi.mock("../../agents/workspace.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + DEFAULT_IDENTITY_FILENAME: "IDENTITY.md", + ensureAgentWorkspace: vi.fn().mockResolvedValue({ dir: "/tmp/workspace" }), + }; +}); -vi.mock("../../agents/model-catalog.js", () => ({ - loadModelCatalog: vi.fn().mockResolvedValue({ models: [] }), -})); +vi.mock("../../agents/model-catalog.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + loadModelCatalog: vi.fn().mockResolvedValue({ models: [] }), + }; +}); vi.mock("../../agents/model-selection.js", async (importOriginal) => { const actual = await importOriginal(); @@ -85,67 +105,119 @@ vi.mock("../../agents/model-selection.js", async (importOriginal) => { }; }); -vi.mock("../../agents/model-fallback.js", () => ({ - runWithModelFallback: runWithModelFallbackMock, -})); +vi.mock("../../agents/model-fallback.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + runWithModelFallback: runWithModelFallbackMock, + }; +}); -vi.mock("../../agents/pi-embedded.js", () => ({ - runEmbeddedPiAgent: runEmbeddedPiAgentMock, -})); +vi.mock("../../agents/pi-embedded.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + runEmbeddedPiAgent: runEmbeddedPiAgentMock, + }; +}); -vi.mock("../../agents/context.js", () => ({ - lookupContextTokens: vi.fn().mockReturnValue(128000), -})); +vi.mock("../../agents/context.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + lookupContextTokens: vi.fn().mockReturnValue(128000), + }; +}); -vi.mock("../../agents/date-time.js", () => ({ - formatUserTime: vi.fn().mockReturnValue("2026-02-10 12:00"), - resolveUserTimeFormat: vi.fn().mockReturnValue("24h"), - resolveUserTimezone: vi.fn().mockReturnValue("UTC"), -})); +vi.mock("../../agents/date-time.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + formatUserTime: vi.fn().mockReturnValue("2026-02-10 12:00"), + resolveUserTimeFormat: vi.fn().mockReturnValue("24h"), + resolveUserTimezone: vi.fn().mockReturnValue("UTC"), + }; +}); -vi.mock("../../agents/timeout.js", () => ({ - resolveAgentTimeoutMs: vi.fn().mockReturnValue(60_000), -})); +vi.mock("../../agents/timeout.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + resolveAgentTimeoutMs: vi.fn().mockReturnValue(60_000), + }; +}); -vi.mock("../../agents/usage.js", () => ({ - deriveSessionTotalTokens: vi.fn().mockReturnValue(30), - hasNonzeroUsage: vi.fn().mockReturnValue(false), -})); +vi.mock("../../agents/usage.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + deriveSessionTotalTokens: vi.fn().mockReturnValue(30), + hasNonzeroUsage: vi.fn().mockReturnValue(false), + }; +}); -vi.mock("../../agents/subagent-announce.js", () => ({ - runSubagentAnnounceFlow: vi.fn().mockResolvedValue(true), -})); +vi.mock("../../agents/subagent-announce.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + runSubagentAnnounceFlow: vi.fn().mockResolvedValue(true), + }; +}); -vi.mock("../../agents/subagent-registry.js", () => ({ - countActiveDescendantRuns: countActiveDescendantRunsMock, - listDescendantRunsForRequester: listDescendantRunsForRequesterMock, -})); +vi.mock("../../agents/subagent-registry.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + countActiveDescendantRuns: countActiveDescendantRunsMock, + listDescendantRunsForRequester: listDescendantRunsForRequesterMock, + }; +}); -vi.mock("../../agents/cli-runner.js", () => ({ - runCliAgent: runCliAgentMock, -})); +vi.mock("../../agents/cli-runner.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + runCliAgent: runCliAgentMock, + }; +}); -vi.mock("../../agents/cli-session.js", () => ({ - getCliSessionId: getCliSessionIdMock, - setCliSessionId: vi.fn(), -})); +vi.mock("../../agents/cli-session.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getCliSessionId: getCliSessionIdMock, + setCliSessionId: vi.fn(), + }; +}); -vi.mock("../../auto-reply/thinking.js", () => ({ - normalizeThinkLevel: vi.fn().mockReturnValue(undefined), - normalizeVerboseLevel: vi.fn().mockReturnValue("off"), - supportsXHighThinking: vi.fn().mockReturnValue(false), -})); +vi.mock("../../auto-reply/thinking.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + normalizeThinkLevel: vi.fn().mockReturnValue(undefined), + normalizeVerboseLevel: vi.fn().mockReturnValue("off"), + supportsXHighThinking: vi.fn().mockReturnValue(false), + }; +}); -vi.mock("../../cli/outbound-send-deps.js", () => ({ - createOutboundSendDeps: vi.fn().mockReturnValue({}), -})); +vi.mock("../../cli/outbound-send-deps.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + createOutboundSendDeps: vi.fn().mockReturnValue({}), + }; +}); -vi.mock("../../config/sessions.js", () => ({ - resolveAgentMainSessionKey: vi.fn().mockReturnValue("main:default"), - resolveSessionTranscriptPath: vi.fn().mockReturnValue("/tmp/transcript.jsonl"), - setSessionRuntimeModel: vi.fn(), - updateSessionStore: updateSessionStoreMock, -})); +vi.mock("../../config/sessions.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + resolveAgentMainSessionKey: vi.fn().mockReturnValue("main:default"), + resolveSessionTranscriptPath: vi.fn().mockReturnValue("/tmp/transcript.jsonl"), + setSessionRuntimeModel: vi.fn(), + updateSessionStore: updateSessionStoreMock, + }; +}); vi.mock("../../routing/session-key.js", async (importOriginal) => { const actual = await importOriginal(); @@ -156,28 +228,48 @@ vi.mock("../../routing/session-key.js", async (importOriginal) => { }; }); -vi.mock("../../infra/agent-events.js", () => ({ - registerAgentRunContext: vi.fn(), -})); +vi.mock("../../infra/agent-events.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + registerAgentRunContext: vi.fn(), + }; +}); -vi.mock("../../infra/outbound/deliver.js", () => ({ - deliverOutboundPayloads: vi.fn().mockResolvedValue(undefined), -})); +vi.mock("../../infra/outbound/deliver.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + deliverOutboundPayloads: vi.fn().mockResolvedValue(undefined), + }; +}); -vi.mock("../../infra/skills-remote.js", () => ({ - getRemoteSkillEligibility: vi.fn().mockReturnValue({}), -})); +vi.mock("../../infra/skills-remote.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getRemoteSkillEligibility: vi.fn().mockReturnValue({}), + }; +}); -vi.mock("../../logger.js", () => ({ - logWarn: (...args: unknown[]) => logWarnMock(...args), -})); +vi.mock("../../logger.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + logWarn: (...args: unknown[]) => logWarnMock(...args), + }; +}); -vi.mock("../../security/external-content.js", () => ({ - buildSafeExternalPrompt: vi.fn().mockReturnValue("safe prompt"), - detectSuspiciousPatterns: vi.fn().mockReturnValue([]), - getHookType: vi.fn().mockReturnValue("unknown"), - isExternalHookSession: vi.fn().mockReturnValue(false), -})); +vi.mock("../../security/external-content.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + buildSafeExternalPrompt: vi.fn().mockReturnValue("safe prompt"), + detectSuspiciousPatterns: vi.fn().mockReturnValue([]), + getHookType: vi.fn().mockReturnValue("unknown"), + isExternalHookSession: vi.fn().mockReturnValue(false), + }; +}); vi.mock("../delivery.js", () => ({ resolveCronDeliveryPlan: resolveCronDeliveryPlanMock, @@ -200,11 +292,15 @@ vi.mock("./session.js", () => ({ resolveCronSession: resolveCronSessionMock, })); -vi.mock("../../agents/defaults.js", () => ({ - DEFAULT_CONTEXT_TOKENS: 128000, - DEFAULT_MODEL: "gpt-4", - DEFAULT_PROVIDER: "openai", -})); +vi.mock("../../agents/defaults.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + DEFAULT_CONTEXT_TOKENS: 128000, + DEFAULT_MODEL: "gpt-4", + DEFAULT_PROVIDER: "openai", + }; +}); export function makeCronSessionEntry(overrides?: Record): CronSessionEntry { return { diff --git a/src/infra/outbound/outbound-send-service.test.ts b/src/infra/outbound/outbound-send-service.test.ts index edc7823b0ec..5988e337dda 100644 --- a/src/infra/outbound/outbound-send-service.test.ts +++ b/src/infra/outbound/outbound-send-service.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; const mocks = vi.hoisted(() => ({ + getDefaultMediaLocalRoots: vi.fn(() => []), dispatchChannelMessageAction: vi.fn(), sendMessage: vi.fn(), sendPoll: vi.fn(), @@ -17,6 +18,7 @@ vi.mock("./message.js", () => ({ })); vi.mock("../../media/local-roots.js", () => ({ + getDefaultMediaLocalRoots: mocks.getDefaultMediaLocalRoots, getAgentScopedMediaLocalRoots: mocks.getAgentScopedMediaLocalRoots, })); @@ -27,6 +29,7 @@ describe("executeSendAction", () => { mocks.dispatchChannelMessageAction.mockClear(); mocks.sendMessage.mockClear(); mocks.sendPoll.mockClear(); + mocks.getDefaultMediaLocalRoots.mockClear(); mocks.getAgentScopedMediaLocalRoots.mockClear(); }); diff --git a/src/tui/gateway-chat.test.ts b/src/tui/gateway-chat.test.ts index 8f45d32d1bc..cc3e7f7e379 100644 --- a/src/tui/gateway-chat.test.ts +++ b/src/tui/gateway-chat.test.ts @@ -147,8 +147,7 @@ describe("resolveGatewayConnection", () => { setup: () => pickPrimaryLanIPv4.mockReturnValue("192.168.1.42"), }, ])("uses loopback host when local bind is $label", async ({ bind, setup }) => { - loadConfig.mockReturnValue({ gateway: { mode: "local", bind } }); - resolveGatewayPort.mockReturnValue(18800); + loadConfig.mockReturnValue({ gateway: { mode: "local", bind, port: 18800 } }); setup(); const result = await withEnvAsync({ OPENCLAW_GATEWAY_TOKEN: "env-token" }, async () => { diff --git a/ui/package.json b/ui/package.json index 1944c788cae..c326f70cf3a 100644 --- a/ui/package.json +++ b/ui/package.json @@ -17,11 +17,12 @@ "marked": "^17.0.4", "signal-polyfill": "^0.2.2", "signal-utils": "^0.21.1", - "vite": "7.3.1" + "vite": "8.0.0" }, "devDependencies": { - "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-playwright": "4.1.0", + "jsdom": "^28.1.0", "playwright": "^1.58.2", - "vitest": "4.0.18" + "vitest": "4.1.0" } } diff --git a/ui/src/i18n/lib/translate.ts b/ui/src/i18n/lib/translate.ts index 2f1a2da783a..fc18f36c8e5 100644 --- a/ui/src/i18n/lib/translate.ts +++ b/ui/src/i18n/lib/translate.ts @@ -21,12 +21,38 @@ class I18nManager { this.loadLocale(); } + private readStoredLocale(): string | null { + const storage = globalThis.localStorage; + if (!storage || typeof storage.getItem !== "function") { + return null; + } + try { + return storage.getItem("openclaw.i18n.locale"); + } catch { + return null; + } + } + + private persistLocale(locale: Locale) { + const storage = globalThis.localStorage; + if (!storage || typeof storage.setItem !== "function") { + return; + } + try { + storage.setItem("openclaw.i18n.locale", locale); + } catch { + // Ignore storage write failures in private/blocked contexts. + } + } + private resolveInitialLocale(): Locale { - const saved = localStorage.getItem("openclaw.i18n.locale"); + const saved = this.readStoredLocale(); if (isSupportedLocale(saved)) { return saved; } - return resolveNavigatorLocale(navigator.language); + const language = + typeof globalThis.navigator?.language === "string" ? globalThis.navigator.language : null; + return resolveNavigatorLocale(language ?? ""); } private loadLocale() { @@ -64,7 +90,7 @@ class I18nManager { } this.locale = locale; - localStorage.setItem("openclaw.i18n.locale", locale); + this.persistLocale(locale); this.notify(); } diff --git a/ui/src/i18n/locales/en.ts b/ui/src/i18n/locales/en.ts index 634647bfea2..df80f2d7c78 100644 --- a/ui/src/i18n/locales/en.ts +++ b/ui/src/i18n/locales/en.ts @@ -10,6 +10,7 @@ export const en: TranslationMap = { enabled: "Enabled", disabled: "Disabled", na: "n/a", + version: "Version", docs: "Docs", theme: "Theme", resources: "Resources", diff --git a/ui/src/i18n/locales/pt-BR.ts b/ui/src/i18n/locales/pt-BR.ts index 39df62971ae..aaaa26c253e 100644 --- a/ui/src/i18n/locales/pt-BR.ts +++ b/ui/src/i18n/locales/pt-BR.ts @@ -10,6 +10,7 @@ export const pt_BR: TranslationMap = { enabled: "Ativado", disabled: "Desativado", na: "n/a", + version: "Versão", docs: "Docs", resources: "Recursos", search: "Pesquisar", diff --git a/ui/src/i18n/locales/zh-CN.ts b/ui/src/i18n/locales/zh-CN.ts index 80478794882..ac321857253 100644 --- a/ui/src/i18n/locales/zh-CN.ts +++ b/ui/src/i18n/locales/zh-CN.ts @@ -10,6 +10,7 @@ export const zh_CN: TranslationMap = { enabled: "已启用", disabled: "已禁用", na: "不适用", + version: "版本", docs: "文档", resources: "资源", search: "搜索", diff --git a/ui/src/i18n/locales/zh-TW.ts b/ui/src/i18n/locales/zh-TW.ts index b3d4b97050f..56a80c61d92 100644 --- a/ui/src/i18n/locales/zh-TW.ts +++ b/ui/src/i18n/locales/zh-TW.ts @@ -10,6 +10,7 @@ export const zh_TW: TranslationMap = { enabled: "已啟用", disabled: "已禁用", na: "不適用", + version: "版本", docs: "文檔", resources: "資源", search: "搜尋", diff --git a/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png b/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png index eae372b60fa88da755a37848a546623402e47f2f..6685d2ad93495c121d8fa47afca4ce8ae230b2ab 100644 GIT binary patch literal 35105 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%0Ap+a*F!(|jr3YC8UB7(70W|itQnU0Uv?|* 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 lnNt;}8vF_uOYjQJ2T28qGO^DA{|9Yuc2EES literal 35014 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 diff --git a/ui/src/ui/app-settings.test.ts b/ui/src/ui/app-settings.test.ts index 08c939403ea..e259031d76e 100644 --- a/ui/src/ui/app-settings.test.ts +++ b/ui/src/ui/app-settings.test.ts @@ -1,4 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { + applyResolvedTheme, + applySettings, + attachThemeListener, + setTabFromRoute, + syncThemeWithSettings, +} from "./app-settings.ts"; import type { ThemeMode, ThemeName } from "./theme.ts"; type Tab = @@ -21,8 +28,6 @@ type Tab = | "debug" | "logs"; -type AppSettingsModule = typeof import("./app-settings.ts"); - type SettingsHost = { settings: { gatewayUrl: string; @@ -114,50 +119,38 @@ const createHost = (tab: Tab): SettingsHost => ({ }); describe("setTabFromRoute", () => { - let appSettings: AppSettingsModule; - beforeEach(() => { - vi.useFakeTimers(); - vi.resetModules(); vi.stubGlobal("localStorage", createStorageMock()); vi.stubGlobal("navigator", { language: "en-US" } as Navigator); - vi.stubGlobal("window", { - setInterval, - clearInterval, - } as unknown as Window & typeof globalThis); }); afterEach(() => { - vi.useRealTimers(); vi.unstubAllGlobals(); }); - it("starts and stops log polling based on the tab", async () => { - appSettings ??= await import("./app-settings.ts"); + it("starts and stops log polling based on the tab", () => { const host = createHost("chat"); - appSettings.setTabFromRoute(host, "logs"); + setTabFromRoute(host, "logs"); expect(host.logsPollInterval).not.toBeNull(); expect(host.debugPollInterval).toBeNull(); - appSettings.setTabFromRoute(host, "chat"); + setTabFromRoute(host, "chat"); expect(host.logsPollInterval).toBeNull(); }); - it("starts and stops debug polling based on the tab", async () => { - appSettings ??= await import("./app-settings.ts"); + it("starts and stops debug polling based on the tab", () => { const host = createHost("chat"); - appSettings.setTabFromRoute(host, "debug"); + setTabFromRoute(host, "debug"); expect(host.debugPollInterval).not.toBeNull(); expect(host.logsPollInterval).toBeNull(); - appSettings.setTabFromRoute(host, "chat"); + setTabFromRoute(host, "chat"); expect(host.debugPollInterval).toBeNull(); }); - it("re-resolves the active palette when only themeMode changes", async () => { - appSettings ??= await import("./app-settings.ts"); + it("re-resolves the active palette when only themeMode changes", () => { const host = createHost("chat"); host.settings.theme = "knot"; host.settings.themeMode = "dark"; @@ -165,7 +158,7 @@ describe("setTabFromRoute", () => { host.themeMode = "dark"; host.themeResolved = "openknot"; - appSettings.applySettings(host, { + applySettings(host, { ...host.settings, themeMode: "light", }); @@ -175,21 +168,19 @@ describe("setTabFromRoute", () => { expect(host.themeResolved).toBe("openknot-light"); }); - it("syncs both theme family and mode from persisted settings", async () => { - appSettings ??= await import("./app-settings.ts"); + it("syncs both theme family and mode from persisted settings", () => { const host = createHost("chat"); host.settings.theme = "dash"; host.settings.themeMode = "light"; - appSettings.syncThemeWithSettings(host); + syncThemeWithSettings(host); expect(host.theme).toBe("dash"); expect(host.themeMode).toBe("light"); expect(host.themeResolved).toBe("dash-light"); }); - it("applies named system themes on OS preference changes", async () => { - appSettings ??= await import("./app-settings.ts"); + it("applies named system themes on OS preference changes", () => { const listeners: Array<(event: MediaQueryListEvent) => void> = []; const matchMedia = vi.fn().mockReturnValue({ matches: false, @@ -199,26 +190,24 @@ describe("setTabFromRoute", () => { removeEventListener: vi.fn(), }); vi.stubGlobal("matchMedia", matchMedia); - vi.stubGlobal("window", { - setInterval, - clearInterval, - matchMedia, - } as unknown as Window & typeof globalThis); + Object.defineProperty(window, "matchMedia", { + configurable: true, + value: matchMedia, + }); const host = createHost("chat"); host.theme = "knot" as unknown as ThemeName & ThemeMode; host.themeMode = "system"; - appSettings.attachThemeListener(host); + attachThemeListener(host); listeners[0]?.({ matches: true } as MediaQueryListEvent); expect(host.themeResolved).toBe("openknot"); listeners[0]?.({ matches: false } as MediaQueryListEvent); - expect(host.themeResolved).toBe("openknot-light"); + expect(host.themeResolved).toBe("openknot"); }); - it("normalizes light family themes to the shared light CSS token", async () => { - appSettings ??= await import("./app-settings.ts"); + it("normalizes light family themes to the shared light CSS token", () => { const root = { dataset: {} as DOMStringMap, style: { colorScheme: "" } as CSSStyleDeclaration & { colorScheme: string }, @@ -226,10 +215,10 @@ describe("setTabFromRoute", () => { vi.stubGlobal("document", { documentElement: root } as Document); const host = createHost("chat"); - appSettings.applyResolvedTheme(host, "dash-light"); + applyResolvedTheme(host, "dash-light"); expect(host.themeResolved).toBe("dash-light"); - expect(root.dataset.theme).toBe("light"); + expect(root.dataset.theme).toBe("dash-light"); expect(root.style.colorScheme).toBe("light"); }); }); diff --git a/ui/src/ui/config-form.browser.test.ts b/ui/src/ui/config-form.browser.test.ts index 393d13a8f97..555454c2426 100644 --- a/ui/src/ui/config-form.browser.test.ts +++ b/ui/src/ui/config-form.browser.test.ts @@ -46,12 +46,15 @@ describe("config form renderer", () => { }, unsupportedPaths: analysis.unsupportedPaths, value: {}, + revealSensitive: true, onPatch, }), container, ); - const tokenInput: HTMLInputElement | null = container.querySelector("input[type='password']"); + const tokenInput: HTMLInputElement | null = container.querySelector( + '#config-section-gateway input.cfg-input[type="text"]', + ); expect(tokenInput).not.toBeNull(); if (!tokenInput) { return; @@ -366,12 +369,15 @@ describe("config form renderer", () => { }, unsupportedPaths: analysis.unsupportedPaths, value: { models: { providers: { openai: { apiKey: "old" } } } }, // pragma: allowlist secret + revealSensitive: true, onPatch, }), container, ); - const apiKeyInput: HTMLInputElement | null = container.querySelector("input[type='password']"); + const apiKeyInput: HTMLInputElement | null = container.querySelector( + "#config-section-models .cfg-map__item-value input.cfg-input[type='text']", + ); expect(apiKeyInput).not.toBeNull(); if (!apiKeyInput) { return; @@ -381,7 +387,7 @@ describe("config form renderer", () => { expect(onPatch).toHaveBeenCalledWith(["models", "providers", "openai", "apiKey"], "new-key"); }); - it("flags unsupported unions", () => { + it("accepts renderable unions", () => { const schema = { type: "object", properties: { @@ -391,7 +397,7 @@ describe("config form renderer", () => { }, }; const analysis = analyzeConfigSchema(schema); - expect(analysis.unsupportedPaths).toContain("mixed"); + expect(analysis.unsupportedPaths).not.toContain("mixed"); }); it("supports nullable types", () => { diff --git a/ui/src/ui/gateway.node.test.ts b/ui/src/ui/gateway.node.test.ts index c77f3a3684c..42d5e598245 100644 --- a/ui/src/ui/gateway.node.test.ts +++ b/ui/src/ui/gateway.node.test.ts @@ -81,6 +81,30 @@ vi.mock("./device-identity.ts", () => ({ const { GatewayBrowserClient } = await import("./gateway.ts"); +function createStorageMock(): Storage { + const store = new Map(); + return { + get length() { + return store.size; + }, + clear() { + store.clear(); + }, + getItem(key: string) { + return store.get(key) ?? null; + }, + key(index: number) { + return Array.from(store.keys())[index] ?? null; + }, + removeItem(key: string) { + store.delete(key); + }, + setItem(key: string, value: string) { + store.set(key, String(value)); + }, + }; +} + function getLatestWebSocket(): MockWebSocket { const ws = wsInstances.at(-1); if (!ws) { @@ -91,6 +115,7 @@ function getLatestWebSocket(): MockWebSocket { describe("GatewayBrowserClient", () => { beforeEach(() => { + const storage = createStorageMock(); wsInstances.length = 0; loadOrCreateDeviceIdentityMock.mockReset(); signDevicePayloadMock.mockClear(); @@ -100,7 +125,12 @@ describe("GatewayBrowserClient", () => { publicKey: "public-key", // pragma: allowlist secret }); - window.localStorage.clear(); + vi.stubGlobal("localStorage", storage); + Object.defineProperty(window, "localStorage", { + configurable: true, + value: storage, + }); + localStorage.clear(); vi.stubGlobal("WebSocket", MockWebSocket); storeDeviceAuthToken({ @@ -306,7 +336,7 @@ describe("GatewayBrowserClient", () => { it("continues reconnecting on first token mismatch when no retry was attempted", async () => { vi.useFakeTimers(); - window.localStorage.clear(); + localStorage.clear(); const client = new GatewayBrowserClient({ url: "ws://127.0.0.1:18789", @@ -346,7 +376,7 @@ describe("GatewayBrowserClient", () => { it("does not auto-reconnect on AUTH_TOKEN_MISSING", async () => { vi.useFakeTimers(); - window.localStorage.clear(); + localStorage.clear(); const client = new GatewayBrowserClient({ url: "ws://127.0.0.1:18789", diff --git a/ui/src/ui/navigation-groups.test.ts b/ui/src/ui/navigation-groups.test.ts index 43ee2db66a4..286101c9c0d 100644 --- a/ui/src/ui/navigation-groups.test.ts +++ b/ui/src/ui/navigation-groups.test.ts @@ -42,15 +42,24 @@ describe("TAB_GROUPS", () => { it("does not expose unfinished settings slices in the sidebar", () => { const settings = navigation.TAB_GROUPS.find((group) => group.label === "settings"); - expect(settings?.tabs).toEqual(["config", "debug", "logs"]); + expect(settings?.tabs).toEqual([ + "config", + "communications", + "appearance", + "automation", + "infrastructure", + "aiAgents", + "debug", + "logs", + ]); }); - it("does not route directly into unfinished settings slices", () => { - expect(navigation.tabFromPath("/communications")).toBeNull(); - expect(navigation.tabFromPath("/appearance")).toBeNull(); - expect(navigation.tabFromPath("/automation")).toBeNull(); - expect(navigation.tabFromPath("/infrastructure")).toBeNull(); - expect(navigation.tabFromPath("/ai-agents")).toBeNull(); + it("routes every published settings slice", () => { + expect(navigation.tabFromPath("/communications")).toBe("communications"); + expect(navigation.tabFromPath("/appearance")).toBe("appearance"); + expect(navigation.tabFromPath("/automation")).toBe("automation"); + expect(navigation.tabFromPath("/infrastructure")).toBe("infrastructure"); + expect(navigation.tabFromPath("/ai-agents")).toBe("aiAgents"); expect(navigation.tabFromPath("/config")).toBe("config"); }); }); diff --git a/ui/src/ui/navigation.test.ts b/ui/src/ui/navigation.test.ts index 4ff0279341b..93206ba70a9 100644 --- a/ui/src/ui/navigation.test.ts +++ b/ui/src/ui/navigation.test.ts @@ -71,7 +71,7 @@ describe("subtitleForTab", () => { }); it("returns descriptive subtitles", () => { - expect(subtitleForTab("chat")).toContain("chat session"); + expect(subtitleForTab("chat")).toContain("quick interventions"); expect(subtitleForTab("config")).toContain("openclaw.json"); }); }); @@ -175,10 +175,10 @@ describe("inferBasePathFromPathname", () => { describe("TAB_GROUPS", () => { it("contains all expected groups", () => { const labels = TAB_GROUPS.map((g) => g.label); - expect(labels).toContain("Chat"); - expect(labels).toContain("Control"); - expect(labels).toContain("Agent"); - expect(labels).toContain("Settings"); + expect(labels).toContain("chat"); + expect(labels).toContain("control"); + expect(labels).toContain("agent"); + expect(labels).toContain("settings"); }); it("all tabs are unique", () => { diff --git a/ui/src/ui/test-helpers/app-mount.ts b/ui/src/ui/test-helpers/app-mount.ts index e078b186203..e49c7d38ea1 100644 --- a/ui/src/ui/test-helpers/app-mount.ts +++ b/ui/src/ui/test-helpers/app-mount.ts @@ -1,29 +1,54 @@ -import { afterEach, beforeEach } from "vitest"; +import { afterEach, beforeEach, vi } from "vitest"; +import { i18n } from "../../i18n/index.ts"; import "../app.ts"; import type { OpenClawApp } from "../app.ts"; +class MockWebSocket { + static CONNECTING = 0; + static OPEN = 1; + static CLOSING = 2; + static CLOSED = 3; + + readyState = MockWebSocket.OPEN; + + addEventListener() {} + + close() { + this.readyState = MockWebSocket.CLOSED; + } + + send() {} +} + export function mountApp(pathname: string) { window.history.replaceState({}, "", pathname); const app = document.createElement("openclaw-app") as OpenClawApp; - app.connect = () => { - // no-op: avoid real gateway WS connections in browser tests - }; document.body.append(app); + app.connected = true; + app.requestUpdate(); return app; } export function registerAppMountHooks() { - beforeEach(() => { + beforeEach(async () => { window.__OPENCLAW_CONTROL_UI_BASE_PATH__ = undefined; localStorage.clear(); sessionStorage.clear(); document.body.innerHTML = ""; + await i18n.setLocale("en"); + vi.stubGlobal("WebSocket", MockWebSocket as unknown as typeof WebSocket); + vi.stubGlobal( + "fetch", + vi.fn(() => new Promise(() => undefined)) as unknown as typeof fetch, + ); }); - afterEach(() => { + afterEach(async () => { window.__OPENCLAW_CONTROL_UI_BASE_PATH__ = undefined; localStorage.clear(); sessionStorage.clear(); document.body.innerHTML = ""; + await i18n.setLocale("en"); + vi.unstubAllGlobals(); }); } diff --git a/ui/src/ui/views/chat.test.ts b/ui/src/ui/views/chat.test.ts index 4565aae8adf..2e04413d39a 100644 --- a/ui/src/ui/views/chat.test.ts +++ b/ui/src/ui/views/chat.test.ts @@ -192,15 +192,14 @@ describe("chat view", () => { renderChat( createProps({ canAbort: true, + sending: true, onAbort, }), ), container, ); - const stopButton = Array.from(container.querySelectorAll("button")).find( - (btn) => btn.textContent?.trim() === "Stop", - ); + const stopButton = container.querySelector('button[title="Stop"]'); expect(stopButton).not.toBeUndefined(); stopButton?.dispatchEvent(new MouseEvent("click", { bubbles: true })); expect(onAbort).toHaveBeenCalledTimes(1); @@ -220,8 +219,8 @@ describe("chat view", () => { container, ); - const newSessionButton = Array.from(container.querySelectorAll("button")).find( - (btn) => btn.textContent?.trim() === "New session", + const newSessionButton = container.querySelector( + 'button[title="New session"]', ); expect(newSessionButton).not.toBeUndefined(); newSessionButton?.dispatchEvent(new MouseEvent("click", { bubbles: true })); diff --git a/ui/src/ui/views/config-form.render.ts b/ui/src/ui/views/config-form.render.ts index 07d78963d61..5f26383c2f5 100644 --- a/ui/src/ui/views/config-form.render.ts +++ b/ui/src/ui/views/config-form.render.ts @@ -294,22 +294,16 @@ function matchesSearch(params: { const criteria = parseConfigSearchQuery(params.query); const q = criteria.text; const meta = SECTION_META[params.key]; + const sectionMetaMatches = + q && + (params.key.toLowerCase().includes(q) || + (meta?.label ? meta.label.toLowerCase().includes(q) : false) || + (meta?.description ? meta.description.toLowerCase().includes(q) : false)); - // Check key name - if (q && params.key.toLowerCase().includes(q)) { + if (sectionMetaMatches && criteria.tags.length === 0) { return true; } - // Check label and description - if (q && meta) { - if (meta.label.toLowerCase().includes(q)) { - return true; - } - if (meta.description.toLowerCase().includes(q)) { - return true; - } - } - return matchesNodeSearch({ schema: params.schema, value: params.sectionValue, diff --git a/ui/src/ui/views/config.browser.test.ts b/ui/src/ui/views/config.browser.test.ts index 138c1654e6d..c6291d8560d 100644 --- a/ui/src/ui/views/config.browser.test.ts +++ b/ui/src/ui/views/config.browser.test.ts @@ -21,6 +21,7 @@ describe("config view", () => { schemaLoading: false, uiHints: {}, formMode: "form" as const, + showModeToggle: true, formValue: {}, originalValue: {}, searchQuery: "", @@ -208,34 +209,46 @@ describe("config view", () => { expect(onSearchChange).toHaveBeenCalledWith("gateway"); }); - it("shows all tag options in compact tag picker", () => { + it("renders top tabs for root and available sections", () => { const container = document.createElement("div"); - render(renderConfig(baseProps()), container); - - const options = Array.from(container.querySelectorAll(".config-search__tag-option")).map( - (option) => option.textContent?.trim(), + render( + renderConfig({ + ...baseProps(), + schema: { + type: "object", + properties: { + gateway: { type: "object", properties: {} }, + agents: { type: "object", properties: {} }, + }, + }, + }), + container, ); - expect(options).toContain("tag:security"); - expect(options).toContain("tag:advanced"); - expect(options).toHaveLength(15); + + const tabs = Array.from(container.querySelectorAll(".config-top-tabs__tab")).map((tab) => + tab.textContent?.trim(), + ); + expect(tabs).toContain("Settings"); + expect(tabs).toContain("Agents"); + expect(tabs).toContain("Gateway"); + expect(tabs).toContain("Appearance"); }); - it("updates search query when toggling a tag option", () => { + it("clears the active search query", () => { const container = document.createElement("div"); const onSearchChange = vi.fn(); render( renderConfig({ ...baseProps(), + searchQuery: "gateway", onSearchChange, }), container, ); - const option = container.querySelector( - '.config-search__tag-option[data-tag="security"]', - ); - expect(option).toBeTruthy(); - option?.click(); - expect(onSearchChange).toHaveBeenCalledWith("tag:security"); + const clearButton = container.querySelector(".config-search__clear"); + expect(clearButton).toBeTruthy(); + clearButton?.click(); + expect(onSearchChange).toHaveBeenCalledWith(""); }); }); diff --git a/ui/vitest.config.ts b/ui/vitest.config.ts index 38d7342ff21..220967cfd1e 100644 --- a/ui/vitest.config.ts +++ b/ui/vitest.config.ts @@ -1,15 +1,37 @@ import { playwright } from "@vitest/browser-playwright"; -import { defineConfig } from "vitest/config"; +import { defineConfig, defineProject } from "vitest/config"; export default defineConfig({ test: { - include: ["src/**/*.test.ts"], - browser: { - enabled: true, - provider: playwright(), - instances: [{ browser: "chromium", name: "chromium" }], - headless: true, - ui: false, - }, + projects: [ + defineProject({ + test: { + name: "unit", + include: ["src/**/*.test.ts"], + exclude: ["src/**/*.browser.test.ts", "src/**/*.node.test.ts"], + environment: "jsdom", + }, + }), + defineProject({ + test: { + name: "unit-node", + include: ["src/**/*.node.test.ts"], + environment: "jsdom", + }, + }), + defineProject({ + test: { + name: "browser", + include: ["src/**/*.browser.test.ts"], + browser: { + enabled: true, + provider: playwright(), + instances: [{ browser: "chromium", name: "chromium" }], + headless: true, + ui: false, + }, + }, + }), + ], }, });