From 3c8b042d088016b0ecb8b6fc51afe8d314a826f4 Mon Sep 17 00:00:00 2001 From: DavidHLP <144919470+DavidHLP@users.noreply.github.com> Date: Thu, 29 Oct 2026 22:37:31 -0700 Subject: [PATCH 1/6] fix: remove committed default credentials from environment template Signed-off-by: DavidHLP --- .env.example | 83 ++++++++++++++++++---------------- .github/workflows/_backend.yml | 9 ++++ docs/DEVELOPMENT.md | 2 + scripts/dev/init-env.sh | 7 +-- 4 files changed, 58 insertions(+), 43 deletions(-) diff --git a/.env.example b/.env.example index 9ef5b7b21c..520e7dcc5a 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ # UltiCode local development environment # -# Do not copy this file and reuse the placeholders. Generate a private `.env` -# containing random infrastructure credentials and documented local app users: +# Credentials are deliberately empty in this tracked template. Generate a +# private `.env` containing random infrastructure and local app credentials: # # ./scripts/dev/init-env.sh # @@ -27,7 +27,7 @@ MANAGEMENT_PORT=9003 DB_HOST=localhost DB_PORT=23306 DB_USER=ulticode -DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +DB_PASSWORD= DB_NAME=ulticode # Owner runtime schemas/accounts. Owners may share this MySQL instance, but # each runtime account is scoped to its own schema. @@ -35,32 +35,32 @@ AUTH_DB_HOST=localhost AUTH_DB_PORT=23306 AUTH_DB_NAME=auth AUTH_DB_USER=auth_rw -AUTH_DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +AUTH_DB_PASSWORD= ADMIN_DB_HOST=localhost ADMIN_DB_PORT=23306 ADMIN_DB_NAME=admin ADMIN_DB_USER=admin_rw -ADMIN_DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +ADMIN_DB_PASSWORD= APP_DB_HOST=localhost APP_DB_PORT=23306 APP_DB_NAME=app APP_DB_USER=app_rw -APP_DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +APP_DB_PASSWORD= NOTIFICATION_DB_HOST=localhost NOTIFICATION_DB_PORT=23306 NOTIFICATION_DB_NAME=notification NOTIFICATION_DB_USER=notification_rw -NOTIFICATION_DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +NOTIFICATION_DB_PASSWORD= # Submission owner runtime. SUBMISSION_DB_HOST=localhost SUBMISSION_DB_PORT=23306 SUBMISSION_DB_NAME=submission SUBMISSION_DB_USER=submission_rw -SUBMISSION_DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +SUBMISSION_DB_PASSWORD= # Separate privileged identity for Submission owner migrations. SUBMISSION_MIGRATION_DB_USER=migration_submission -SUBMISSION_MIGRATION_DB_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +SUBMISSION_MIGRATION_DB_PASSWORD= APP_SUBMISSION_ROUTING_MODE=remote # One-time cutover input (do not persist in `.env`): # `SUBMISSION_CUTOVER_QUIESCE_CONFIRM=I_UNDERSTAND_SUBMISSION_QUIESCE_ALL_WRITERS` @@ -68,8 +68,8 @@ SUBMISSION_CUTOVER_COMPLETE=false SUBMISSION_APP_DB_USER=app_rw SUBMISSION_APP_DB_HOST=% NOTIFICATION_APP_DB_USER= -MYSQL_ROOT_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh -DB_ROOT_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +MYSQL_ROOT_PASSWORD= +DB_ROOT_PASSWORD= # Explicit privileged owner migration job input. Required when # MIGRATION_SCHEMA is auth/admin/app/notification/submission; never reuse a # runtime *_DB_USER as the migration account. @@ -94,20 +94,22 @@ REDIS_ACL_DIR=.local/redis # Per-owner Redis ACL credentials (review 2026-08-25). The shared # REDIS_PASSWORD is gone: each security domain authenticates as its own ACL # user in the runtime REDIS_ACL_DIR (default `.local/redis`; default user -# disabled). The values below are DEV-ONLY placeholders; init-env.sh generates -# the runtime ACL outside Git. Production must rotate all of them with -# scripts/runbooks/redis-acl-rotation.sh. -AUTH_REDIS_PASSWORD=dev-only-auth-redis-password -ADMIN_REDIS_PASSWORD=dev-only-admin-redis-password -APP_REDIS_PASSWORD=dev-only-app-redis-password -SUBMISSION_REDIS_PASSWORD=dev-only-submission-redis-password -SEARCH_REDIS_PASSWORD=dev-only-search-redis-password -NOTIFICATION_REDIS_PASSWORD=dev-only-notification-redis-password -JUDGE_REDIS_PASSWORD=dev-only-judge-redis-password -OPS_REDIS_PASSWORD=dev-only-ops-redis-password -HEALTH_REDIS_PASSWORD=dev-only-health-redis-password -REDIS_REPLICATION_PASSWORD=dev-only-redis-replication-password -REDIS_SENTINEL_PASSWORD=dev-only-redis-sentinel-password +# disabled). Leave all passwords empty in this tracked template. For local +# development, init-env.sh generates separate random passwords in the ignored +# .env file and renders the runtime ACL outside Git. Deployed environments must +# inject operator-managed secrets. Existing credentials are rotated separately +# with scripts/runbooks/redis-acl-rotation.sh; never reuse committed defaults. +AUTH_REDIS_PASSWORD= +ADMIN_REDIS_PASSWORD= +APP_REDIS_PASSWORD= +SUBMISSION_REDIS_PASSWORD= +SEARCH_REDIS_PASSWORD= +NOTIFICATION_REDIS_PASSWORD= +JUDGE_REDIS_PASSWORD= +OPS_REDIS_PASSWORD= +HEALTH_REDIS_PASSWORD= +REDIS_REPLICATION_PASSWORD= +REDIS_SENTINEL_PASSWORD= # Production only: mount a secret-managed directory containing the certificate # and private key; do not put PEM material in this repository. # TLS_CERT_DIR=/run/secrets/ulticode-tls @@ -125,7 +127,7 @@ REDIS_SENTINEL_PASSWORD=dev-only-redis-sentinel-password # REDIS_USERNAME=ulticode-auth REDIS_PASSWORD="$AUTH_REDIS_PASSWORD" # JWT and browser security -JWT_SECRET=GENERATED_BY_scripts_dev_init_env_sh_minimum_32_chars +JWT_SECRET= JWT_COOKIE_SECURE=false CORS_ALLOWED_ORIGINS=http://localhost:9002,http://localhost:9003,http://127.0.0.1:9002,http://127.0.0.1:9003 FRONTEND_URL=http://localhost:9002 @@ -139,23 +141,23 @@ NACOS_NAMESPACE=dev NACOS_GROUP=DEFAULT_GROUP DUBBO_NAMESPACE=dev NACOS_USERNAME=ulticode_dev_admin -NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +NACOS_PASSWORD= # Dev-only per-service Nacos registry identities generated by init-env.sh. AUTH_NACOS_USERNAME=ulticode-auth -AUTH_NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +AUTH_NACOS_PASSWORD= ADMIN_NACOS_USERNAME=ulticode-admin -ADMIN_NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +ADMIN_NACOS_PASSWORD= APP_NACOS_USERNAME=ulticode-app -APP_NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +APP_NACOS_PASSWORD= SUBMISSION_NACOS_USERNAME=ulticode-submission -SUBMISSION_NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +SUBMISSION_NACOS_PASSWORD= NOTIFICATION_NACOS_USERNAME=ulticode-notification -NOTIFICATION_NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh +NOTIFICATION_NACOS_PASSWORD= JUDGE_NACOS_USERNAME=ulticode-judge -JUDGE_NACOS_PASSWORD=GENERATED_BY_scripts_dev_init_env_sh -NACOS_AUTH_TOKEN=GENERATED_BY_scripts_dev_init_env_sh -NACOS_AUTH_IDENTITY_KEY=GENERATED_BY_scripts_dev_init_env_sh -NACOS_AUTH_IDENTITY_VALUE=GENERATED_BY_scripts_dev_init_env_sh +JUDGE_NACOS_PASSWORD= +NACOS_AUTH_TOKEN= +NACOS_AUTH_IDENTITY_KEY= +NACOS_AUTH_IDENTITY_VALUE= # Production-only trust controls; set these in the deployment secret store. #NACOS_DB_USER=nacos_rw #NACOS_DB_PASSWORD=GENERATED_IN_DEPLOYMENT_SECRET_STORE @@ -237,7 +239,7 @@ APP_STORAGE_S3_UPLOAD_TIMEOUT_MS=1800000 #MANAGED_OTLP_AUTHORIZATION= # Generated by init-env.sh; startup/test fall back to an in-memory disposable # value for older env files and never persist it automatically. -MEILI_MASTER_KEY=GENERATED_BY_scripts_dev_init_env_sh +MEILI_MASTER_KEY= # Optional Judge0 async Adapter. Keep disabled for private/hidden tests. # Enable only with an operator-managed HTTPS endpoint and secret-file API key. #JUDGE0_ENABLED=false @@ -330,11 +332,12 @@ APP_BOOTSTRAP_ADMIN_USERNAME= APP_BOOTSTRAP_ADMIN_EMAIL= APP_BOOTSTRAP_ADMIN_PASSWORD= -# Fixed credentials for the disposable local development database only. +# Per-checkout credentials for the disposable local development database only. +# init-env.sh generates the administrator password and matching browser input. DEV_SEED_USERS_ENABLED=true DEV_SEED_ADMIN_USERNAME=admin DEV_SEED_ADMIN_EMAIL=admin@localhost.test -DEV_SEED_ADMIN_PASSWORD=admin123 +DEV_SEED_ADMIN_PASSWORD= DEV_SEED_ADMIN_ROLE=ADMIN # Optional integrations are disabled until real local credentials are supplied. @@ -355,4 +358,4 @@ EMAIL_FROM_NAME=UltiCode Dev VITE_API_BASE_URL=/api VITE_ADMIN_BASE_URL=http://localhost:9003 VITE_TEST_USERNAME=admin -VITE_TEST_PASSWORD=admin123 +VITE_TEST_PASSWORD= diff --git a/.github/workflows/_backend.yml b/.github/workflows/_backend.yml index 7227560c76..773371f5a5 100644 --- a/.github/workflows/_backend.yml +++ b/.github/workflows/_backend.yml @@ -315,6 +315,15 @@ jobs: } trap cleanup EXIT cp .env.example "$env_file" + # Synthetic values for config-only validation; runtime templates stay empty. + printf '%s\n' \ + "MYSQL_ROOT_PASSWORD=config-only-synthetic-mysql-root-password" \ + "DB_PASSWORD=config-only-synthetic-db-password" \ + "HEALTH_REDIS_PASSWORD=config-only-synthetic-health-redis-password" \ + "NACOS_AUTH_TOKEN=config-only-synthetic-nacos-auth-token" \ + "NACOS_AUTH_IDENTITY_KEY=config-only-synthetic-nacos-auth-identity-key" \ + "NACOS_AUTH_IDENTITY_VALUE=config-only-synthetic-nacos-auth-identity-value" \ + "MEILI_MASTER_KEY=config-only-synthetic-meili-master-key" >> "$env_file" replication_password="$(openssl rand -hex 16)" sentinel_password="$(openssl rand -hex 16)" printf '\nNACOS_DB_USER=nacos_rw\nNACOS_DB_PASSWORD=ci-ha-config\nNACOS_SERVERS=nacos:8848 nacos-2:8848 nacos-3:8848\nREDIS_HA_CONFIG_DIR=%s\nREDIS_REPLICATION_PASSWORD=%s\nREDIS_SENTINEL_PASSWORD=%s\n' \ diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 9b97d281fe..6c3738baaa 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -695,6 +695,8 @@ enabled-owner wiring 或业务 journey。 `.env` 是本地部署密管输入,由 `./scripts/dev/init-env.sh` 生成并被 Git 忽略;`.env.example` 与 `.env.test.example` 是可提交模板,不包含可用凭据。实现配置以各服务 `application.yml`、Compose 和 `ecosystem.config.cjs` 为准。 +`.env.example` 的数据库、Redis ACL、Nacos、JWT、Meili 和开发用户凭据全部留空。首次本地初始化使用 `./scripts/dev/init-env.sh`,由初始化流程生成各角色独立的随机凭据并写入 ignored `.env`;开发管理员密码与 `VITE_TEST_PASSWORD` 使用同一份本次初始化值,验收入口继续从环境读取。部署环境从密钥系统注入。不要直接使用模板启动,也不要重用曾提交到 Git 的默认密码。Redis ACL 生成器在任一角色密码缺失时拒绝生成配置;已部署凭据的撤销或轮换需要单独执行相应运维流程。 + ### 常用变量 | 变量 | 用途 | 规则 | diff --git a/scripts/dev/init-env.sh b/scripts/dev/init-env.sh index e1eb1bc492..36e33cdd05 100755 --- a/scripts/dev/init-env.sh +++ b/scripts/dev/init-env.sh @@ -123,6 +123,7 @@ app_db_password="app_$(random_hex 18)" notification_db_password="notification_$(random_hex 18)" submission_db_password="submission_$(random_hex 18)" submission_migration_password="migration_submission_$(random_hex 24)" +dev_seed_admin_password="local_admin_$(random_hex 24)" mkdir -p "$(dirname "$OUTPUT_FILE")" umask 077 @@ -311,12 +312,12 @@ APP_BOOTSTRAP_ADMIN_USERNAME= APP_BOOTSTRAP_ADMIN_EMAIL= APP_BOOTSTRAP_ADMIN_PASSWORD= -# Fixed credentials for the disposable local development database only. +# Per-checkout credentials for the disposable local development database only. DEV_SEED_USERS_ENABLED=true DEV_SEED_DATA_ENABLED=true DEV_SEED_ADMIN_USERNAME=admin DEV_SEED_ADMIN_EMAIL=admin@localhost.test -DEV_SEED_ADMIN_PASSWORD=admin123 +DEV_SEED_ADMIN_PASSWORD=$dev_seed_admin_password DEV_SEED_ADMIN_ROLE=ADMIN GITHUB_CLIENT_ID= @@ -335,7 +336,7 @@ EMAIL_FROM_NAME="UltiCode Dev" VITE_API_BASE_URL=/api VITE_ADMIN_BASE_URL=http://localhost:9003 VITE_TEST_USERNAME=admin -VITE_TEST_PASSWORD=admin123 +VITE_TEST_PASSWORD=$dev_seed_admin_password EOF chmod 600 "$OUTPUT_FILE" From 3945131d3d0fbfcb568d81a7cb57ae9c12e5a4c2 Mon Sep 17 00:00:00 2001 From: DavidHLP <144919470+DavidHLP@users.noreply.github.com> Date: Thu, 29 Oct 2026 22:59:22 -0700 Subject: [PATCH 2/6] fix(agent): refresh development corpus source binding Signed-off-by: DavidHLP --- services/agent/data/repository_corpus_manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/agent/data/repository_corpus_manifest.json b/services/agent/data/repository_corpus_manifest.json index c1a9b643ae..f141362155 100644 --- a/services/agent/data/repository_corpus_manifest.json +++ b/services/agent/data/repository_corpus_manifest.json @@ -29,8 +29,8 @@ }, { "doc_id": "repository-development", - "version": "sha256-5417a89a3f26d82c4a92e2d643042659427ca9f2956bc300fdcace80b292d35c", - "chunk_id": "repository-development:sha256-5417a89a3f26d82c4a92e2d643042659427ca9f2956bc300fdcace80b292d35c:1", + "version": "sha256-14938aebb49345c86b07b96cc7d13c44981d2d19f4bd28e14c4a22171974f2c2", + "chunk_id": "repository-development:sha256-14938aebb49345c86b07b96cc7d13c44981d2d19f4bd28e14c4a22171974f2c2:1", "source_path": "docs/DEVELOPMENT.md", "access_scope": "repository-public", "sample_kind": "real", From 289473a83b84824a3f5edb4e1427f7c187e8d3ff Mon Sep 17 00:00:00 2001 From: DavidHLP Date: Sat, 31 Oct 2026 20:49:38 -0700 Subject: [PATCH 3/6] fix: patch frontend and Nacos runtime vulnerabilities Signed-off-by: DavidHLP --- docs/DEVELOPMENT.md | 2 + pnpm-lock.yaml | 1325 ++++++++--------- pnpm-workspace.yaml | 6 +- .../data/repository_corpus_manifest.json | 4 +- services/platform/rpc-resilience/pom.xml | 17 + .../NacosRuntimeDependencyTest.java | 71 + services/pom.xml | 19 + 7 files changed, 727 insertions(+), 717 deletions(-) create mode 100644 services/platform/rpc-resilience/src/test/java/com/ulticode/rpc/resilience/NacosRuntimeDependencyTest.java diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 6c3738baaa..0670e93855 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -347,6 +347,8 @@ Management forms use patched Zod 4 through `src/lib/toTypedSchema.ts`, which pre vee-validate 4 form contract for parsed values, defaults, field errors and required metadata. The published Zod 3 adapter is not used; production dependency audits retain the high-severity gate. +Nacos 客户端使用官方 `pure` classifier,并显式引入同版本 `nacos-api`、`nacos-common`,由共享 RPC 模块提供给各 Owner/Worker;排除 Dubbo 引入的默认 shaded client,避免其内嵌依赖绕过 Maven 的安全版本管理。依赖升级须保留 protobuf 消息解析与 loopback gRPC 回归,并由镜像扫描及真实安装 CI 验证。Guava 升级不修复 Nacos 旧 protobuf 生成代码的资源放大风险;本地消息回归也不证明该风险已消除或线上可利用。 + 后续变更必须保留以下基线契约: - Console 与 Management 保持各自路由、布局和权限边界,跨端行为归属现有 focused package; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4562c6933b..0ae3e60dbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,8 +5,10 @@ settings: excludeLinksFromLockfile: false overrides: + vue-i18n: 11.4.16 + stylus: 0.59.0 dompurify: 3.4.17 - follow-redirects: 1.16.1 + follow-redirects: 1.16.2 markdown-it: 15.0.3 brace-expansion@5: 5.0.12 browserslist: ^4.28.7 @@ -31,14 +33,14 @@ importers: version: 1.12.1 '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) dotenv: specifier: ^18.0.8 version: 18.0.8 devDependencies: '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@6.0.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@6.0.3)) jsdom: specifier: ^30.1.3 version: 30.1.3 @@ -47,7 +49,7 @@ importers: version: 1.64.1 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) apps/console: dependencies: @@ -68,7 +70,7 @@ importers: version: 3.49.0(vue@3.5.44(typescript@6.0.3)) '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) '@tanstack/vue-virtual': specifier: ^3.13.47 version: 3.13.47(vue@3.5.44(typescript@6.0.3)) @@ -119,10 +121,10 @@ importers: version: link:../../packages/theme '@unovis/ts': specifier: ^1.7.1 - version: 1.7.1(supports-color@7.2.0) + version: 1.7.1 '@unovis/vue': specifier: ^1.7.1 - version: 1.7.1(@unovis/ts@1.7.1(supports-color@7.2.0))(vue@3.5.44(typescript@6.0.3)) + version: 1.7.1(@unovis/ts@1.7.1)(vue@3.5.44(typescript@6.0.3)) '@vue-dnd-kit/core': specifier: 1.7.0 version: 1.7.0(@vueuse/core@14.4.0(vue@3.5.44(typescript@6.0.3)))(vue@3.5.44(typescript@6.0.3)) @@ -131,7 +133,7 @@ importers: version: 14.4.0(vue@3.5.44(typescript@6.0.3)) axios: specifier: ^1.20.0 - version: 1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0) + version: 1.20.0 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -164,7 +166,7 @@ importers: version: 2.11.0(vue@3.5.44(typescript@6.0.3)) sockjs-client: specifier: ^1.6.1 - version: 1.6.1(supports-color@7.2.0) + version: 1.6.1 tailwind-merge: specifier: ^3.7.0 version: 3.7.0 @@ -178,11 +180,11 @@ importers: specifier: ^3.5.44 version: 3.5.44(typescript@6.0.3) vue-i18n: - specifier: ^11.4.16 + specifier: 11.4.16 version: 11.4.16(vue@3.5.44(typescript@6.0.3)) vue-router: specifier: ^5.4.0 - version: 5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) vue-sonner: specifier: ^2.0.9 version: 2.0.9 @@ -216,31 +218,31 @@ importers: version: 1.5.4 '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) '@vitejs/plugin-vue-jsx': specifier: ^5.1.6 - version: 5.1.6(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 5.1.6(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) '@vitest/coverage-v8': specifier: ^5.0.5 version: 5.0.5(vitest@5.0.5) '@vue/eslint-config-prettier': specifier: ^10.2.0 - version: 10.2.0(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(prettier@3.9.10) + version: 10.2.0(eslint@10.13.0(jiti@2.7.0))(prettier@3.9.10) '@vue/eslint-config-typescript': specifier: ^14.9.0 - version: 14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + version: 14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@6.0.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@6.0.3)) '@vue/tsconfig': specifier: ^0.9.1 version: 0.9.1(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)) eslint: specifier: ^10.13.0 - version: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + version: 10.13.0(jiti@2.7.0) eslint-plugin-vue: specifier: ^10.11.1 - version: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + version: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))) jiti: specifier: ^2.7.0 version: 2.7.0 @@ -261,19 +263,19 @@ importers: version: 6.0.3 unplugin-icons: specifier: ^24.0.0 - version: 24.0.0(@vue/compiler-sfc@3.5.43)(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 24.0.0(@vue/compiler-sfc@3.5.44)(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vite: specifier: ^8.0.16 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vite-plugin-pwa: specifier: ^2.0.0 - version: 2.0.0(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(workbox-build@7.4.1(supports-color@7.2.0))(workbox-window@7.4.1) + version: 2.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(workbox-build@7.4.1)(workbox-window@7.4.1) vite-plugin-vue-devtools: specifier: ^8.2.1 - version: 8.2.1(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 8.2.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue-tsc: specifier: ^3.3.13 version: 3.3.13(typescript@6.0.3) @@ -284,7 +286,7 @@ importers: specifier: ^3.5.44 version: 3.5.44(typescript@6.0.3) vue-i18n: - specifier: ^11.4.16 + specifier: 11.4.16 version: 11.4.16(vue@3.5.44(typescript@6.0.3)) devDependencies: '@types/node': @@ -292,25 +294,25 @@ importers: version: 26.6.5 '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) '@vitest/coverage-v8': specifier: ^5.0.5 version: 5.0.5(vitest@5.0.5) '@vue/eslint-config-prettier': specifier: ^10.2.0 - version: 10.2.0(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(prettier@3.9.10) + version: 10.2.0(eslint@10.13.0(jiti@2.7.0))(prettier@3.9.10) '@vue/eslint-config-typescript': specifier: ^14.9.0 - version: 14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + version: 14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@6.0.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@6.0.3)) eslint: specifier: ^10.13.0 - version: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + version: 10.13.0(jiti@2.7.0) eslint-plugin-vue: specifier: ^10.11.1 - version: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + version: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))) jsdom: specifier: ^30.1.3 version: 30.1.3 @@ -319,10 +321,10 @@ importers: version: 6.0.3 vite: specifier: ^8.0.16 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue-tsc: specifier: ^3.3.13 version: 3.3.13(typescript@6.0.3) @@ -349,7 +351,7 @@ importers: version: 3.49.0(vue@3.5.44(typescript@6.0.3)) '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) '@tanstack/vue-table': specifier: ^8.21.3 version: 8.21.3(vue@3.5.44(typescript@6.0.3)) @@ -400,16 +402,16 @@ importers: version: link:../../packages/theme '@unovis/ts': specifier: ^1.7.1 - version: 1.7.1(supports-color@7.2.0) + version: 1.7.1 '@unovis/vue': specifier: ^1.7.1 - version: 1.7.1(@unovis/ts@1.7.1(supports-color@7.2.0))(vue@3.5.44(typescript@6.0.3)) + version: 1.7.1(@unovis/ts@1.7.1)(vue@3.5.44(typescript@6.0.3)) '@vueuse/core': specifier: ^14.4.0 version: 14.4.0(vue@3.5.44(typescript@6.0.3)) axios: specifier: ^1.20.0 - version: 1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0) + version: 1.20.0 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -462,14 +464,14 @@ importers: specifier: ^8.3.2 version: 8.3.2(echarts@6.1.0)(vue@3.5.44(typescript@6.0.3)) vue-i18n: - specifier: ^11.4.16 + specifier: 11.4.16 version: 11.4.16(vue@3.5.44(typescript@6.0.3)) vue-input-otp: specifier: ^0.4.0 version: 0.4.0(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)) vue-router: specifier: ^5.4.0 - version: 5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) vue-sonner: specifier: ^2.0.9 version: 2.0.9 @@ -488,7 +490,7 @@ importers: version: 26.6.5 '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) '@vitest/coverage-v8': specifier: ^5.0.5 version: 5.0.5(vitest@5.0.5) @@ -497,22 +499,22 @@ importers: version: 5.0.5(vitest@5.0.5) '@vue/eslint-config-prettier': specifier: ^10.2.0 - version: 10.2.0(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(prettier@3.9.10) + version: 10.2.0(eslint@10.13.0(jiti@2.7.0))(prettier@3.9.10) '@vue/eslint-config-typescript': specifier: ^14.9.0 - version: 14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + version: 14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@6.0.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@6.0.3)) '@vue/tsconfig': specifier: ^0.9.1 version: 0.9.1(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)) eslint: specifier: ^10.13.0 - version: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + version: 10.13.0(jiti@2.7.0) eslint-plugin-vue: specifier: ~10.11.1 - version: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + version: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))) jiti: specifier: ^2.7.0 version: 2.7.0 @@ -536,13 +538,13 @@ importers: version: 6.0.3 vite: specifier: ^8.0.16 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vite-plugin-vue-devtools: specifier: ^8.2.1 - version: 8.2.1(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + version: 8.2.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue-tsc: specifier: ^3.3.13 version: 3.3.13(typescript@6.0.3) @@ -554,7 +556,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) @@ -563,7 +565,7 @@ importers: dependencies: axios: specifier: ^1.16.1 - version: 1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0) + version: 1.20.0 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -579,7 +581,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) @@ -608,15 +610,15 @@ importers: specifier: ^3.7.0 version: 3.7.0 vue-i18n: - specifier: ^11.0.0 - version: 11.4.13(vue@3.5.44(typescript@5.9.3)) + specifier: 11.4.16 + version: 11.4.16(vue@3.5.44(typescript@5.9.3)) devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@5.9.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@5.9.3)) '@vue/tsconfig': specifier: ^0.9.1 version: 0.9.1(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)) @@ -628,16 +630,16 @@ importers: version: 5.9.3 vite: specifier: ^8.0.16 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) vue-router: specifier: ^5.4.0 - version: 5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) + version: 5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) vue-tsc: specifier: ^3.3.13 version: 3.3.13(typescript@5.9.3) @@ -664,7 +666,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/design-system: dependencies: @@ -679,10 +681,10 @@ importers: version: link:../theme '@unovis/ts': specifier: ^1.7.1 - version: 1.7.1(supports-color@7.2.0) + version: 1.7.1 '@unovis/vue': specifier: ^1.7.1 - version: 1.7.1(@unovis/ts@1.7.1(supports-color@7.2.0))(vue@3.5.44(typescript@5.9.3)) + version: 1.7.1(@unovis/ts@1.7.1)(vue@3.5.44(typescript@5.9.3)) '@vueuse/core': specifier: ^14.4.0 version: 14.4.0(vue@3.5.44(typescript@5.9.3)) @@ -716,19 +718,19 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) '@vue/tsconfig': specifier: ^0.9.1 version: 0.9.1(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)) shadcn-vue: specifier: 2.8.2 - version: 2.8.2(babel-plugin-macros@3.1.0)(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(magicast@0.5.5)(supports-color@7.2.0)(vue@3.5.44(typescript@5.9.3)) + version: 2.8.2(babel-plugin-macros@3.1.0)(eslint@10.13.0(jiti@2.7.0))(magicast@0.5.5)(vue@3.5.44(typescript@5.9.3)) typescript: specifier: ~5.9.3 version: 5.9.3 vite: specifier: ^8.0.16 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) @@ -743,7 +745,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/http-client: dependencies: @@ -752,7 +754,7 @@ importers: version: link:../auth-core axios: specifier: ^1.13.2 - version: 1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0) + version: 1.20.0 devDependencies: '@types/node': specifier: ^26.6.5 @@ -762,7 +764,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/i18n-completeness: devDependencies: @@ -774,7 +776,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/locale-preference: devDependencies: @@ -786,7 +788,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) @@ -820,7 +822,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/request-state: devDependencies: @@ -832,7 +834,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) @@ -844,7 +846,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/sidebar-menu: dependencies: @@ -865,14 +867,14 @@ importers: version: 3.7.0 vue-router: specifier: ^5.0.0 - version: 5.3.1(@vue/compiler-sfc@3.5.43)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) + version: 5.3.1(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.10 - version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) + version: 6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)) '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@5.9.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@5.9.3)) '@vue/tsconfig': specifier: ^0.9.1 version: 0.9.1(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)) @@ -884,10 +886,10 @@ importers: version: 5.9.3 vite: specifier: ^8.0.16 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) @@ -909,7 +911,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) packages/theme: devDependencies: @@ -918,7 +920,7 @@ importers: version: 26.6.5 '@vue/test-utils': specifier: ^2.5.1 - version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@5.9.3)) + version: 2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@5.9.3)) happy-dom: specifier: ^21.0.3 version: 21.0.3 @@ -927,13 +929,16 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) vue: specifier: ^3.5.44 version: 3.5.44(typescript@5.9.3) packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -1759,34 +1764,18 @@ packages: '@internationalized/number@3.6.7': resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==} - '@intlify/core-base@11.4.13': - resolution: {integrity: sha512-3qGv1/j0fl6ZSeehGaznE78A4i3hCaOeOyDh7jq7SV6ch/XGoy96xIrYuALTV3xhIqj2rktsIKcwlLZ3CbOhkA==} - engines: {node: '>= 22'} - '@intlify/core-base@11.4.16': resolution: {integrity: sha512-xB8nMdMRLNx7b0zPvrHy0+N9uq9Vfi1aUxHqWgn2e2/TbjCKy8HfoFpnUXXxVP8I0p1ccd6LFSC3XsFjZ3vweA==} engines: {node: '>= 22'} - '@intlify/devtools-types@11.4.13': - resolution: {integrity: sha512-f38d2yvjNc1/c+BnTLsxTB0729clTtyy7kTxHu4FFlvI6FpmBOp7b9sLYtsKJpXSZ70kIEexvNwDSzLkIlYnlQ==} - engines: {node: '>= 22'} - '@intlify/devtools-types@11.4.16': resolution: {integrity: sha512-Bl7arICsKgwcSEQuZJun3swenN4jwSpg35lCpijFznYbW9GvkfH4wLxcI5+gz7d/EHqu66UT9CZDIdnQdgMAGg==} engines: {node: '>= 22'} - '@intlify/message-compiler@11.4.13': - resolution: {integrity: sha512-cjKsDeWUD/i3mj0QtC8hydLCFP5mgZtTU1xZZaN9/O3FG94EXc0rTbecYpifglp26rpoJoIjSlW137VejLKsZw==} - engines: {node: '>= 22'} - '@intlify/message-compiler@11.4.16': resolution: {integrity: sha512-p4lDWmBAsi3ja+PuEfPRavYyvqkYn/Upxz7UpnyI9LgIIy8XawcGIDzN+k99Z+99etO3HmDXGeTxnJIJGgSZ+g==} engines: {node: '>= 22'} - '@intlify/shared@11.4.13': - resolution: {integrity: sha512-ZjcNgEED1FtTCFb+ohWBdR21k5kvleKtM9peobQtLB83mNIfEhJK86dEbhfk+OcUrybrEbc4eDeE9UbFUVHsjQ==} - engines: {node: '>= 22'} - '@intlify/shared@11.4.16': resolution: {integrity: sha512-xehmkbEgbbNh/V+d8r3hFup0ViaN29YTJSAfRr28C54rxjyZEO0RNQKqW7VVajj16gLdglotNjiq+sIVNtHGzw==} engines: {node: '>= 22'} @@ -2931,11 +2920,6 @@ packages: '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true '@vue-dnd-kit/core@1.7.0': resolution: {integrity: sha512-6Otpo/9Fp/cX5EiUoN6XmIPtm/mOreAXi8clr9HgzVvDHD0sfkgVOFxCUiVbH46yAzr6KBU1Q1tjSWLBqua+5g==} @@ -3272,11 +3256,6 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -3545,9 +3524,6 @@ packages: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - css@3.0.0: - resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3745,10 +3721,6 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - dedent@1.7.2: resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} peerDependencies: @@ -4143,8 +4115,8 @@ packages: flatted@3.4.4: resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} - follow-redirects@1.16.1: - resolution: {integrity: sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==} + follow-redirects@1.16.2: + resolution: {integrity: sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4301,10 +4273,6 @@ packages: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -5651,10 +5619,6 @@ packages: resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} engines: {node: '>=0.10.0'} - source-map-resolve@0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -5751,8 +5715,8 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - stylus@0.57.0: - resolution: {integrity: sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==} + stylus@0.59.0: + resolution: {integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==} hasBin: true super-regex@1.1.0: @@ -5766,10 +5730,6 @@ packages: resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} engines: {node: '>=16'} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -6168,7 +6128,6 @@ packages: engines: {node: '>=v14.21.3'} peerDependencies: vite: ^8.0.16 - vue: '*' vite-plugin-vue-inspector@6.0.0: resolution: {integrity: sha512-OpyITJLgZNibxlrik1EmRtvXHDjLRxNPsWkGFTERZs2LgMEdG4W0WoFt5GIgp3a3jRou+eJR8U1zOBk/XQgEbw==} @@ -6187,7 +6146,7 @@ packages: less: ^4.0.0 sass: ^1.70.0 sass-embedded: ^1.70.0 - stylus: '>=0.54.8' + stylus: 0.59.0 sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 @@ -6288,12 +6247,6 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - vue-i18n@11.4.13: - resolution: {integrity: sha512-2G7LC9XcdZ0IljFib7lKGHNiBBOTv6HO+2bnBaOiQgDYZ+uUnqSpuED5DbBo1t7su50o/WRGn+ZfDQTGd26xEw==} - engines: {node: '>= 22'} - peerDependencies: - vue: ^3.0.0 - vue-i18n@11.4.16: resolution: {integrity: sha512-Kv9tp6iTmaAeOwop7hkAo28N1IBsbSVpnxyE26b6gqc4Q2E9Ke3ZHHA3oqqwS6/cYLT1henZU4etTaLQxrK98Q==} engines: {node: '>= 22'} @@ -6579,6 +6532,8 @@ packages: snapshots: + '@adobe/css-tools@4.5.0': {} + '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.8.0 @@ -6618,20 +6573,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7(supports-color@7.2.0)': + '@babel/core@7.29.7': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -6658,32 +6613,32 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@7.2.0) + '@babel/helper-member-expression-to-functions': 7.29.7 '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.12 transitivePeerDependencies: @@ -6691,26 +6646,26 @@ snapshots: '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.29.7(supports-color@7.2.0)': + '@babel/helper-member-expression-to-functions@7.29.7': dependencies: - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -6720,27 +6675,27 @@ snapshots: '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-wrap-function': 7.29.7(supports-color@7.2.0) - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/helper-wrap-function': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@7.2.0)': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': dependencies: - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -6755,10 +6710,10 @@ snapshots: '@babel/helper-validator-option@7.29.7': {} - '@babel/helper-wrap-function@7.29.7(supports-color@7.2.0)': + '@babel/helper-wrap-function@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -6782,534 +6737,534 @@ snapshots: dependencies: '@babel/types': 8.0.6 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 - '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-globals': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/template': 7.29.7 - '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 - '@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/preset-env@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/compat-data': 7.29.7 - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7(supports-color@7.2.0)) - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7) + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7) core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/types': 7.29.8 esutils: 2.0.3 - '@babel/preset-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color @@ -7321,7 +7276,7 @@ snapshots: '@babel/parser': 7.29.8 '@babel/types': 7.29.8 - '@babel/traverse@7.29.7(supports-color@7.2.0)': + '@babel/traverse@7.29.7': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -7329,7 +7284,7 @@ snapshots: '@babel/parser': 7.29.8 '@babel/template': 7.29.7 '@babel/types': 7.29.8 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -7474,9 +7429,9 @@ snapshots: tslib: 2.8.1 optional: true - '@emotion/babel-plugin@11.13.5(supports-color@7.2.0)': + '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7 '@babel/runtime': 7.29.7 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -7498,9 +7453,9 @@ snapshots: '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 - '@emotion/css@11.13.5(supports-color@7.2.0)': + '@emotion/css@11.13.5': dependencies: - '@emotion/babel-plugin': 11.13.5(supports-color@7.2.0) + '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/sheet': 1.4.0 @@ -7528,17 +7483,17 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@eslint-community/eslint-utils@4.9.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.13.0(jiti@2.7.0))': dependencies: - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + eslint: 10.13.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5(supports-color@7.2.0)': + '@eslint/config-array@0.23.5': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 minimatch: 10.2.5 transitivePeerDependencies: - supports-color @@ -7627,40 +7582,22 @@ snapshots: dependencies: '@swc/helpers': 0.5.23 - '@intlify/core-base@11.4.13': - dependencies: - '@intlify/devtools-types': 11.4.13 - '@intlify/message-compiler': 11.4.13 - '@intlify/shared': 11.4.13 - '@intlify/core-base@11.4.16': dependencies: '@intlify/devtools-types': 11.4.16 '@intlify/message-compiler': 11.4.16 '@intlify/shared': 11.4.16 - '@intlify/devtools-types@11.4.13': - dependencies: - '@intlify/core-base': 11.4.13 - '@intlify/shared': 11.4.13 - '@intlify/devtools-types@11.4.16': dependencies: '@intlify/core-base': 11.4.16 '@intlify/shared': 11.4.16 - '@intlify/message-compiler@11.4.13': - dependencies: - '@intlify/shared': 11.4.13 - source-map-js: 1.2.2 - '@intlify/message-compiler@11.4.16': dependencies: '@intlify/shared': 11.4.16 source-map-js: 1.2.2 - '@intlify/shared@11.4.13': {} - '@intlify/shared@11.4.16': {} '@isaacs/cliui@9.0.0': {} @@ -7768,7 +7705,7 @@ snapshots: optionalDependencies: markdown-it: 15.0.3 - '@modelcontextprotocol/sdk@1.32.1(supports-color@7.2.0)(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.32.1(zod@3.25.76)': dependencies: '@hono/node-server': 2.1.5(hono@4.13.13) ajv: 8.20.0 @@ -7778,8 +7715,8 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.1.1 - express: 5.3.0(supports-color@7.2.0) - express-rate-limit: 8.7.1(express@5.3.0(supports-color@7.2.0))(supports-color@7.2.0) + express: 5.3.0 + express-rate-limit: 8.7.1(express@5.3.0) hono: 4.13.13 jose: 6.2.12 json-schema-typed: 8.0.2 @@ -7992,10 +7929,10 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-babel@6.1.0(@babel/core@7.29.7(supports-color@7.2.0))(rollup@4.62.0)(supports-color@7.2.0)': + '@rollup/plugin-babel@6.1.0(@babel/core@7.29.7)(rollup@4.62.0)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@rollup/pluginutils': 5.4.0(rollup@4.62.0) optionalDependencies: rollup: 4.62.0 @@ -8194,12 +8131,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.3.3 - '@tailwindcss/vite@4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))': + '@tailwindcss/vite@4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) '@tanstack/table-core@8.21.3': {} @@ -8455,15 +8392,15 @@ snapshots: dependencies: '@types/node': 26.6.5 - '@typescript-eslint/eslint-plugin@8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.61.1 - '@typescript-eslint/type-utils': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.61.1 - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + eslint: 10.13.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -8471,23 +8408,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.61.1 '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.61.1 - debug: 4.4.3(supports-color@7.2.0) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + debug: 4.4.3 + eslint: 10.13.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.61.1(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/project-service@8.61.1(typescript@6.0.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@6.0.3) '@typescript-eslint/types': 8.61.1 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -8501,13 +8438,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - debug: 4.4.3(supports-color@7.2.0) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + debug: 4.4.3 + eslint: 10.13.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -8515,13 +8452,13 @@ snapshots: '@typescript-eslint/types@8.61.1': {} - '@typescript-eslint/typescript-estree@8.61.1(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.61.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.61.1(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/project-service': 8.61.1(typescript@6.0.3) '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@6.0.3) '@typescript-eslint/types': 8.61.1 '@typescript-eslint/visitor-keys': 8.61.1 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 tinyglobby: 0.2.17 @@ -8530,13 +8467,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/utils@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.13.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.61.1 '@typescript-eslint/types': 8.61.1 - '@typescript-eslint/typescript-estree': 8.61.1(supports-color@7.2.0)(typescript@6.0.3) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -8555,9 +8492,9 @@ snapshots: dependencies: lodash-es: 4.18.1 - '@unovis/ts@1.7.1(supports-color@7.2.0)': + '@unovis/ts@1.7.1': dependencies: - '@emotion/css': 11.13.5(supports-color@7.2.0) + '@emotion/css': 11.13.5 '@juggle/resize-observer': 3.4.0 '@maplibre/maplibre-gl-style-spec': 26.4.1 '@types/d3': 7.4.3 @@ -8629,20 +8566,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@unovis/vue@1.7.1(@unovis/ts@1.7.1(supports-color@7.2.0))(vue@3.5.44(typescript@5.9.3))': + '@unovis/vue@1.7.1(@unovis/ts@1.7.1)(vue@3.5.44(typescript@5.9.3))': dependencies: - '@unovis/ts': 1.7.1(supports-color@7.2.0) + '@unovis/ts': 1.7.1 vue: 3.5.44(typescript@5.9.3) - '@unovis/vue@1.7.1(@unovis/ts@1.7.1(supports-color@7.2.0))(vue@3.5.44(typescript@6.0.3))': + '@unovis/vue@1.7.1(@unovis/ts@1.7.1)(vue@3.5.44(typescript@6.0.3))': dependencies: - '@unovis/ts': 1.7.1(supports-color@7.2.0) + '@unovis/ts': 1.7.1 vue: 3.5.44(typescript@6.0.3) - '@unovue/detypes@0.8.5(supports-color@7.2.0)': + '@unovue/detypes@0.8.5': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) '@vue/compiler-dom': 3.5.43 '@vue/compiler-sfc': 3.5.43 '@vuedx/template-ast-types': 0.7.1 @@ -8652,28 +8589,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3))': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vue: 3.5.44(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vue: 3.5.44(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3))': + '@vitejs/plugin-vue@6.0.10(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) vue: 3.5.44(typescript@6.0.3) '@vitest/coverage-v8@5.0.5(vitest@5.0.5)': @@ -8686,7 +8623,7 @@ snapshots: obug: 3.0.0 std-env: 4.3.0 tinyrainbow: 3.2.0 - vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) '@vitest/istanbul-lib-coverage@1.0.2': {} @@ -8694,14 +8631,14 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.2 - '@vitest/mocker@5.0.5(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))': + '@vitest/mocker@5.0.5(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.5 estree-walker: 3.0.3 magic-string: 1.4.3 optionalDependencies: - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) '@vitest/pretty-format@5.0.5': dependencies: @@ -8717,7 +8654,7 @@ snapshots: pathe: 2.0.3 sirv: 3.0.2 tinyrainbow: 3.2.0 - vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) '@vitest/utils@5.0.5': dependencies: @@ -8731,21 +8668,11 @@ snapshots: '@volar/source-map@2.4.28': {} - '@volar/typescript@2.4.28(typescript@5.9.3)': - dependencies: - '@volar/language-core': 2.4.28 - path-browserify: 1.0.1 - vscode-uri: 3.1.0 - optionalDependencies: - typescript: 5.9.3 - - '@volar/typescript@2.4.28(typescript@6.0.3)': + '@volar/typescript@2.4.28': dependencies: '@volar/language-core': 2.4.28 path-browserify: 1.0.1 vscode-uri: 3.1.0 - optionalDependencies: - typescript: 6.0.3 '@vue-dnd-kit/core@1.7.0(@vueuse/core@14.4.0(vue@3.5.44(typescript@6.0.3)))(vue@3.5.44(typescript@6.0.3))': dependencies: @@ -8776,54 +8703,54 @@ snapshots: '@vue/babel-helper-vue-transform-on@2.0.1': {} - '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.7)': dependencies: - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 '@vue/babel-helper-vue-transform-on': 1.5.0 - '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.7) '@vue/shared': 3.5.43 optionalDependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)': dependencies: - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 '@vue/babel-helper-vue-transform-on': 2.0.1 - '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7) '@vue/shared': 3.5.43 optionalDependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.7)': dependencies: '@babel/code-frame': 7.29.7 - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/parser': 7.29.8 '@vue/compiler-sfc': 3.5.43 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)': dependencies: '@babel/code-frame': 7.29.7 - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/parser': 7.29.8 '@vue/compiler-sfc': 3.5.43 @@ -8929,23 +8856,23 @@ snapshots: '@vue/devtools-shared@8.2.1': {} - '@vue/eslint-config-prettier@10.2.0(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(prettier@3.9.10)': + '@vue/eslint-config-prettier@10.2.0(eslint@10.13.0(jiti@2.7.0))(prettier@3.9.10)': dependencies: - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) - eslint-config-prettier: 10.1.8(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)) - eslint-plugin-prettier: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(prettier@3.9.10) + eslint: 10.13.0(jiti@2.7.0) + eslint-config-prettier: 10.1.8(eslint@10.13.0(jiti@2.7.0)) + eslint-plugin-prettier: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)))(eslint@10.13.0(jiti@2.7.0))(prettier@3.9.10) prettier: 3.9.10 transitivePeerDependencies: - '@types/eslint' - '@vue/eslint-config-typescript@14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@vue/eslint-config-typescript@14.9.0(eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) - eslint-plugin-vue: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)) + '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0) + eslint-plugin-vue: 10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))) fast-glob: 3.3.3 - typescript-eslint: 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - vue-eslint-parser: 10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + typescript-eslint: 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + vue-eslint-parser: 10.4.1(eslint@10.13.0(jiti@2.7.0)) optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -9009,23 +8936,23 @@ snapshots: '@vue/shared@3.5.44': {} - '@vue/test-utils@2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@5.9.3))': + '@vue/test-utils@2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@5.9.3))': dependencies: - '@vue/compiler-dom': 3.5.43 + '@vue/compiler-dom': 3.5.44 js-beautify: 2.0.3 vue: 3.5.44(typescript@5.9.3) vue-component-type-helpers: 3.3.5 optionalDependencies: - '@vue/server-renderer': 3.5.43 + '@vue/server-renderer': 3.5.44 - '@vue/test-utils@2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.44(typescript@6.0.3))': + '@vue/test-utils@2.5.1(@vue/compiler-dom@3.5.44)(@vue/server-renderer@3.5.44)(vue@3.5.44(typescript@6.0.3))': dependencies: - '@vue/compiler-dom': 3.5.43 + '@vue/compiler-dom': 3.5.44 js-beautify: 2.0.3 vue: 3.5.44(typescript@6.0.3) vue-component-type-helpers: 3.3.5 optionalDependencies: - '@vue/server-renderer': 3.5.43 + '@vue/server-renderer': 3.5.44 '@vue/tsconfig@0.9.1(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3))': optionalDependencies: @@ -9127,9 +9054,9 @@ snapshots: acorn@8.17.0: {} - agent-base@6.0.2(supports-color@7.2.0): + agent-base@6.0.2: dependencies: - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9231,17 +9158,15 @@ snapshots: at-least-node@1.0.0: {} - atob@2.1.2: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 - axios@1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0): + axios@1.20.0: dependencies: - follow-redirects: 1.16.1(debug@4.4.3(supports-color@7.2.0)) + follow-redirects: 1.16.2 form-data: 4.0.6 - https-proxy-agent: 5.0.1(supports-color@7.2.0) + https-proxy-agent: 5.0.1 proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -9253,27 +9178,27 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.12 - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) transitivePeerDependencies: - supports-color @@ -9291,11 +9216,11 @@ snapshots: birpc@4.0.0: {} - body-parser@2.3.0(supports-color@7.2.0): + body-parser@2.3.0: dependencies: bytes: 3.1.2 content-type: 2.1.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 http-errors: 2.0.1 iconv-lite: 0.7.3 on-finished: 2.4.1 @@ -9513,12 +9438,6 @@ snapshots: css-what@6.2.2: {} - css@3.0.0: - dependencies: - inherits: 2.0.4 - source-map: 0.6.1 - source-map-resolve: 0.6.0 - cssesc@3.0.0: {} csstype@3.2.3: {} @@ -9727,22 +9646,16 @@ snapshots: date-fns@4.4.0: {} - debug@3.2.7(supports-color@7.2.0): + debug@3.2.7: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 - debug@4.4.3(supports-color@7.2.0): + debug@4.4.3: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 decimal.js@10.6.0: {} - decode-uri-component@0.2.2: {} - dedent@1.7.2(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 @@ -9983,31 +9896,31 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)): + eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)): dependencies: - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + eslint: 10.13.0(jiti@2.7.0) - eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(prettier@3.9.10): + eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)))(eslint@10.13.0(jiti@2.7.0))(prettier@3.9.10): dependencies: - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + eslint: 10.13.0(jiti@2.7.0) prettier: 3.9.10 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)) + eslint-config-prettier: 10.1.8(eslint@10.13.0(jiti@2.7.0)) - eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)): + eslint-plugin-vue@10.11.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0))): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.13.0(jiti@2.7.0)) + eslint: 10.13.0(jiti@2.7.0) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.4 semver: 7.8.5 - vue-eslint-parser: 10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + vue-eslint-parser: 10.4.1(eslint@10.13.0(jiti@2.7.0)) xml-name-validator: 5.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) eslint-scope@9.1.2: dependencies: @@ -10020,11 +9933,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0): + eslint@10.13.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.13.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5(supports-color@7.2.0) + '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.3 @@ -10034,7 +9947,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -10095,28 +10008,28 @@ snapshots: expect-type@1.4.0: {} - express-rate-limit@8.7.1(express@5.3.0(supports-color@7.2.0))(supports-color@7.2.0): + express-rate-limit@8.7.1(express@5.3.0): dependencies: - debug: 4.4.3(supports-color@7.2.0) - express: 5.3.0(supports-color@7.2.0) + debug: 4.4.3 + express: 5.3.0 ip-address: 10.7.4 transitivePeerDependencies: - supports-color - express@5.3.0(supports-color@7.2.0): + express@5.3.0: dependencies: accepts: 2.0.0 - body-parser: 2.3.0(supports-color@7.2.0) + body-parser: 2.3.0 content-disposition: 2.0.1 content-type: 2.1.0 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.1(supports-color@7.2.0) + finalhandler: 2.1.1 fresh: 2.0.0 http-errors: 2.0.1 merge-descriptors: 2.0.0 @@ -10127,9 +10040,9 @@ snapshots: proxy-addr: 2.0.8 qs: 6.16.0 range-parser: 1.3.0 - router: 2.2.0(supports-color@7.2.0) - send: 1.2.1(supports-color@7.2.0) - serve-static: 2.2.1(supports-color@7.2.0) + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 statuses: 2.0.2 type-is: 2.1.0 vary: 1.1.2 @@ -10186,9 +10099,9 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@2.1.1(supports-color@7.2.0): + finalhandler@2.1.1: dependencies: - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -10212,9 +10125,7 @@ snapshots: flatted@3.4.4: {} - follow-redirects@1.16.1(debug@4.4.3(supports-color@7.2.0)): - optionalDependencies: - debug: 4.4.3(supports-color@7.2.0) + follow-redirects@1.16.2: {} for-each@0.3.5: dependencies: @@ -10384,9 +10295,6 @@ snapshots: has-bigints@1.1.0: {} - has-flag@4.0.0: - optional: true - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -10437,10 +10345,10 @@ snapshots: http-parser-js@0.5.10: {} - https-proxy-agent@5.0.1(supports-color@7.2.0): + https-proxy-agent@5.0.1: dependencies: - agent-base: 6.0.2(supports-color@7.2.0) - debug: 4.4.3(supports-color@7.2.0) + agent-base: 6.0.2 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -11339,13 +11247,13 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-styl@0.12.3(supports-color@7.2.0): + postcss-styl@0.12.3: dependencies: - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 fast-diff: 1.3.0 lodash.sortedlastindex: 4.1.0 postcss: 8.5.26 - stylus: 0.57.0(supports-color@7.2.0) + stylus: 0.59.0 transitivePeerDependencies: - supports-color @@ -11598,9 +11506,9 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.62.0 fsevents: 2.3.3 - router@2.2.0(supports-color@7.2.0): + router@2.2.0: dependencies: - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -11653,9 +11561,9 @@ snapshots: semver@7.8.5: {} - send@1.2.1(supports-color@7.2.0): + send@1.2.1: dependencies: - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -11671,12 +11579,12 @@ snapshots: serialize-javascript@7.0.6: {} - serve-static@2.2.1(supports-color@7.2.0): + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1(supports-color@7.2.0) + send: 1.2.1 transitivePeerDependencies: - supports-color @@ -11704,11 +11612,11 @@ snapshots: setprototypeof@1.2.0: {} - shadcn-vue@2.8.2(babel-plugin-macros@3.1.0)(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(magicast@0.5.5)(supports-color@7.2.0)(vue@3.5.44(typescript@5.9.3)): + shadcn-vue@2.8.2(babel-plugin-macros@3.1.0)(eslint@10.13.0(jiti@2.7.0))(magicast@0.5.5)(vue@3.5.44(typescript@5.9.3)): dependencies: '@dotenvx/dotenvx': 2.34.2 - '@modelcontextprotocol/sdk': 1.32.1(supports-color@7.2.0)(zod@3.25.76) - '@unovue/detypes': 0.8.5(supports-color@7.2.0) + '@modelcontextprotocol/sdk': 1.32.1(zod@3.25.76) + '@unovue/detypes': 0.8.5 '@vue/compiler-sfc': 3.5.43 c12: 3.3.4(magicast@0.5.5) commander: 15.0.0 @@ -11738,7 +11646,7 @@ snapshots: ts-morph: 28.0.0 undici: 8.11.2 validate-npm-package-name: 8.0.0 - vue-metamorph: 3.3.4(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + vue-metamorph: 3.3.4(eslint@10.13.0(jiti@2.7.0)) zod: 3.25.76 zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: @@ -11805,9 +11713,9 @@ snapshots: smol-toml@1.9.1: {} - sockjs-client@1.6.1(supports-color@7.2.0): + sockjs-client@1.6.1: dependencies: - debug: 3.2.7(supports-color@7.2.0) + debug: 3.2.7 eventsource: 2.0.2 faye-websocket: 0.11.4 inherits: 2.0.4 @@ -11817,11 +11725,6 @@ snapshots: source-map-js@1.2.2: {} - source-map-resolve@0.6.0: - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.2 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -11933,12 +11836,11 @@ snapshots: stylis@4.2.0: {} - stylus@0.57.0(supports-color@7.2.0): + stylus@0.59.0: dependencies: - css: 3.0.0 - debug: 4.4.3(supports-color@7.2.0) + '@adobe/css-tools': 4.5.0 + debug: 4.4.3 glob: 7.2.3 - safer-buffer: 2.1.2 sax: 1.2.4 source-map: 0.7.6 transitivePeerDependencies: @@ -11958,11 +11860,6 @@ snapshots: dependencies: copy-anything: 4.0.5 - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - optional: true - supports-preserve-symlinks-flag@1.0.0: {} synckit@0.11.13: @@ -12116,13 +12013,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): + typescript-eslint@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.61.1(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + '@typescript-eslint/eslint-plugin': 8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.61.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -12171,15 +12068,15 @@ snapshots: unpipe@1.0.0: {} - unplugin-icons@24.0.0(@vue/compiler-sfc@3.5.43)(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + unplugin-icons@24.0.0(@vue/compiler-sfc@3.5.44)(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/utils': 3.1.7 local-pkg: 1.2.1 obug: 2.2.1 - unplugin: 3.3.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + unplugin: 3.3.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) optionalDependencies: - '@vue/compiler-sfc': 3.5.43 + '@vue/compiler-sfc': 3.5.44 transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -12196,7 +12093,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.7 - unplugin@3.3.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + unplugin@3.3.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.7 @@ -12204,9 +12101,9 @@ snapshots: optionalDependencies: rolldown: 1.2.14 rollup: 4.62.0 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) - unplugin@3.4.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + unplugin@3.4.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.7 @@ -12214,7 +12111,7 @@ snapshots: optionalDependencies: rolldown: 1.2.14 rollup: 4.62.0 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) upath@1.2.0: {} @@ -12259,17 +12156,17 @@ snapshots: type-fest: 4.41.0 vue: 3.5.44(typescript@6.0.3) - vite-dev-rpc@2.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + vite-dev-rpc@2.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: birpc: 4.0.0 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) - vite-hot-client: 2.2.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) + vite-hot-client: 2.2.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) - vite-hot-client@2.2.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + vite-hot-client@2.2.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) - vite-plugin-inspect@11.4.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + vite-plugin-inspect@11.4.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: ansis: 4.3.1 error-stack-parser-es: 1.0.5 @@ -12279,50 +12176,50 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.2 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) - vite-dev-rpc: 2.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) + vite-dev-rpc: 2.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) - vite-plugin-pwa@2.0.0(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(workbox-build@7.4.1(supports-color@7.2.0))(workbox-window@7.4.1): + vite-plugin-pwa@2.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(workbox-build@7.4.1)(workbox-window@7.4.1): dependencies: - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 pretty-bytes: 6.1.1 tinyglobby: 0.2.17 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) - workbox-build: 7.4.1(supports-color@7.2.0) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) + workbox-build: 7.4.1 workbox-window: 7.4.1 transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.2.1(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)): + vite-plugin-vue-devtools@8.2.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)): dependencies: '@vue/devtools-core': 8.2.1(vue@3.5.44(typescript@6.0.3)) '@vue/devtools-kit': 8.2.1 '@vue/devtools-shared': 8.2.1 sirv: 3.0.2 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) - vite-plugin-inspect: 11.4.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) - vite-plugin-vue-inspector: 6.0.0(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) - vue: 3.5.44(typescript@6.0.3) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) + vite-plugin-inspect: 11.4.1(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) + vite-plugin-vue-inspector: 6.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) transitivePeerDependencies: - '@nuxt/kit' - supports-color + - vue - vite-plugin-vue-inspector@6.0.0(supports-color@7.2.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + vite-plugin-vue-inspector@6.0.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7) '@vue/compiler-dom': 3.5.43 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) transitivePeerDependencies: - supports-color - vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1): + vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -12333,14 +12230,14 @@ snapshots: '@types/node': 26.6.5 fsevents: 2.3.3 jiti: 2.7.0 - stylus: 0.57.0(supports-color@7.2.0) + stylus: 0.59.0 terser: 5.48.0 yaml: 2.9.1 - vitest@5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)): + vitest@5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(@vitest/ui@5.0.5)(happy-dom@21.0.3)(jsdom@30.1.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.5(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + '@vitest/mocker': 5.0.5(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) chai: 6.3.0 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -12351,7 +12248,7 @@ snapshots: tinybench: 6.2.2 tinyexec: 1.3.1 tinyglobby: 0.2.17 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) why-is-node-running: 3.2.1 optionalDependencies: '@types/node': 26.6.5 @@ -12375,10 +12272,10 @@ snapshots: echarts: 6.1.0 vue: 3.5.44(typescript@6.0.3) - vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): + vue-eslint-parser@10.4.1(eslint@10.13.0(jiti@2.7.0)): dependencies: - debug: 4.4.3(supports-color@7.2.0) - eslint: 10.13.0(jiti@2.7.0)(supports-color@7.2.0) + debug: 4.4.3 + eslint: 10.13.0(jiti@2.7.0) eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 espree: 11.2.0 @@ -12387,11 +12284,11 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@11.4.13(vue@3.5.44(typescript@5.9.3)): + vue-i18n@11.4.16(vue@3.5.44(typescript@5.9.3)): dependencies: - '@intlify/core-base': 11.4.13 - '@intlify/devtools-types': 11.4.13 - '@intlify/shared': 11.4.13 + '@intlify/core-base': 11.4.16 + '@intlify/devtools-types': 11.4.16 + '@intlify/shared': 11.4.16 '@vue/devtools-api': 6.6.4 vue: 3.5.44(typescript@5.9.3) @@ -12411,7 +12308,7 @@ snapshots: transitivePeerDependencies: - typescript - vue-metamorph@3.3.4(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): + vue-metamorph@3.3.4(eslint@10.13.0(jiti@2.7.0)): dependencies: '@babel/parser': 8.0.0-alpha.12 ast-types-x: 1.18.0 @@ -12429,15 +12326,15 @@ snapshots: postcss-less: 6.0.0(postcss@8.5.26) postcss-sass: 0.5.0 postcss-scss: 4.0.9(postcss@8.5.26) - postcss-styl: 0.12.3(supports-color@7.2.0) + postcss-styl: 0.12.3 recast-x: 1.0.5 table: 6.9.0 - vue-eslint-parser: 10.4.1(eslint@10.13.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + vue-eslint-parser: 10.4.1(eslint@10.13.0(jiti@2.7.0)) transitivePeerDependencies: - eslint - supports-color - vue-router@5.3.1(@vue/compiler-sfc@3.5.43)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)): + vue-router@5.3.1(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)): dependencies: '@vue-macros/common': 3.1.4(vue@3.5.44(typescript@5.9.3)) '@vue/devtools-api': 8.2.1 @@ -12453,13 +12350,13 @@ snapshots: picomatch: 4.0.7 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.3.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + unplugin: 3.3.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) unplugin-utils: 0.3.2 vue: 3.5.44(typescript@5.9.3) optionalDependencies: - '@vue/compiler-sfc': 3.5.43 + '@vue/compiler-sfc': 3.5.44 pinia: 4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)) - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -12470,7 +12367,7 @@ snapshots: - unloader - webpack - vue-router@5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)): + vue-router@5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@5.9.3)): dependencies: '@vue-macros/common': 3.1.4(vue@3.5.44(typescript@5.9.3)) '@vue/devtools-api': 8.2.1 @@ -12486,13 +12383,13 @@ snapshots: picomatch: 4.0.7 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.4.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + unplugin: 3.4.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) unplugin-utils: 0.3.2 vue: 3.5.44(typescript@5.9.3) optionalDependencies: '@vue/compiler-sfc': 3.5.44 pinia: 4.1.0(@vue/devtools-api@8.2.1)(typescript@5.9.3)(vue@3.5.44(typescript@5.9.3)) - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) transitivePeerDependencies: - '@farmfe/core' - '@rsbuild/core' @@ -12504,7 +12401,7 @@ snapshots: - unloader - webpack - vue-router@5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)): + vue-router@5.4.0(@vue/compiler-sfc@3.5.44)(pinia@4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)))(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)): dependencies: '@vue-macros/common': 3.1.4(vue@3.5.44(typescript@6.0.3)) '@vue/devtools-api': 8.2.1 @@ -12520,13 +12417,13 @@ snapshots: picomatch: 4.0.7 scule: 1.3.0 tinyglobby: 0.2.17 - unplugin: 3.4.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1)) + unplugin: 3.4.0(rolldown@1.2.14)(rollup@4.62.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1)) unplugin-utils: 0.3.2 vue: 3.5.44(typescript@6.0.3) optionalDependencies: '@vue/compiler-sfc': 3.5.44 pinia: 4.1.0(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.44(typescript@6.0.3)) - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.57.0(supports-color@7.2.0))(terser@5.48.0)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(stylus@0.59.0)(terser@5.48.0)(yaml@2.9.1) transitivePeerDependencies: - '@farmfe/core' - '@rsbuild/core' @@ -12542,13 +12439,13 @@ snapshots: vue-tsc@3.3.13(typescript@5.9.3): dependencies: - '@volar/typescript': 2.4.28(typescript@5.9.3) + '@volar/typescript': 2.4.28 '@vue/language-core': 3.3.13 typescript: 5.9.3 vue-tsc@3.3.13(typescript@6.0.3): dependencies: - '@volar/typescript': 2.4.28(typescript@6.0.3) + '@volar/typescript': 2.4.28 '@vue/language-core': 3.3.13 typescript: 6.0.3 @@ -12684,13 +12581,13 @@ snapshots: dependencies: workbox-core: 7.4.1 - workbox-build@7.4.1(supports-color@7.2.0): + workbox-build@7.4.1: dependencies: '@apideck/better-ajv-errors': 0.3.7(ajv@8.20.0) - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/preset-env': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/preset-env': 7.29.7(@babel/core@7.29.7) '@babel/runtime': 7.29.7 - '@rollup/plugin-babel': 6.1.0(@babel/core@7.29.7(supports-color@7.2.0))(rollup@4.62.0)(supports-color@7.2.0) + '@rollup/plugin-babel': 6.1.0(@babel/core@7.29.7)(rollup@4.62.0) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.0) '@rollup/plugin-replace': 6.0.3(rollup@4.62.0) '@rollup/plugin-terser': 1.0.0(rollup@4.62.0) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3bfa8bab3b..cd1c2e788b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,8 +8,12 @@ packages: - "apps/*" - "packages/*" overrides: + # Keep shared auto-installed peers on the patched Vue I18n line. + vue-i18n: 11.4.16 + # Remove css/source-map-resolve and its vulnerable URI decoder. + stylus: 0.59.0 dompurify: 3.4.17 - follow-redirects: 1.16.1 + follow-redirects: 1.16.2 markdown-it: 15.0.3 # Patch transitive CLI/parser dependencies without crossing consumer majors. brace-expansion@5: 5.0.12 diff --git a/services/agent/data/repository_corpus_manifest.json b/services/agent/data/repository_corpus_manifest.json index f141362155..e19fba8cb7 100644 --- a/services/agent/data/repository_corpus_manifest.json +++ b/services/agent/data/repository_corpus_manifest.json @@ -29,8 +29,8 @@ }, { "doc_id": "repository-development", - "version": "sha256-14938aebb49345c86b07b96cc7d13c44981d2d19f4bd28e14c4a22171974f2c2", - "chunk_id": "repository-development:sha256-14938aebb49345c86b07b96cc7d13c44981d2d19f4bd28e14c4a22171974f2c2:1", + "version": "sha256-f04b71c7f56d0f79b20b738370161ab52ee149afec9e9c10c2fc5f0710c6db36", + "chunk_id": "repository-development:sha256-f04b71c7f56d0f79b20b738370161ab52ee149afec9e9c10c2fc5f0710c6db36:1", "source_path": "docs/DEVELOPMENT.md", "access_scope": "repository-public", "sample_kind": "real", diff --git a/services/platform/rpc-resilience/pom.xml b/services/platform/rpc-resilience/pom.xml index f1912280b3..06a9afffc4 100644 --- a/services/platform/rpc-resilience/pom.xml +++ b/services/platform/rpc-resilience/pom.xml @@ -14,6 +14,23 @@ UltiCode Backend (Dubbo dependency resilience) + + + com.alibaba.nacos + nacos-client + ${nacos-client.version} + pure + + + com.alibaba.nacos + nacos-common + ${nacos-client.version} + + + com.alibaba.nacos + nacos-api + ${nacos-client.version} + org.apache.dubbo dubbo-config-spring diff --git a/services/platform/rpc-resilience/src/test/java/com/ulticode/rpc/resilience/NacosRuntimeDependencyTest.java b/services/platform/rpc-resilience/src/test/java/com/ulticode/rpc/resilience/NacosRuntimeDependencyTest.java new file mode 100644 index 0000000000..155e280d28 --- /dev/null +++ b/services/platform/rpc-resilience/src/test/java/com/ulticode/rpc/resilience/NacosRuntimeDependencyTest.java @@ -0,0 +1,71 @@ +package com.ulticode.rpc.resilience; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.alibaba.nacos.api.grpc.auto.Metadata; +import com.alibaba.nacos.api.grpc.auto.Payload; +import com.alibaba.nacos.api.grpc.auto.RequestGrpc; +import com.alibaba.nacos.client.naming.NacosNamingService; +import com.google.protobuf.Any; +import com.google.protobuf.ByteString; +import io.grpc.ManagedChannel; +import io.grpc.Server; +import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder; +import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; +import io.grpc.stub.StreamObserver; +import java.net.InetSocketAddress; +import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.Test; + +class NacosRuntimeDependencyTest { + + @Test + void excludesTheSdkWithUnmanagedShadedDependencies() throws Exception { + assertThat(NacosNamingService.class.getProtectionDomain().getCodeSource().getLocation().toString()) + .endsWith("-pure.jar"); + assertThat(getClass().getClassLoader().getResources( + "com/alibaba/nacos/api/NacosFactory.class").asIterator()) + .toIterable().hasSize(1); + assertThat(getClass().getClassLoader().getResource( + "com/alibaba/nacos/shaded/com/google/common/collect/ImmutableList.class")) + .isNull(); + } + + @Test + void roundTripsNacosMessagesWithTheManagedProtobufRuntime() throws Exception { + Payload payload = payload(); + assertThat(Payload.parseFrom(payload.toByteArray())).isEqualTo(payload); + } + + @Test + void exchangesNacosMessagesOverTheManagedGrpcTransport() throws Exception { + Server server = NettyServerBuilder.forAddress(new InetSocketAddress("127.0.0.1", 0)) + .addService(new RequestGrpc.RequestImplBase() { + @Override + public void request(Payload request, StreamObserver response) { + response.onNext(request); + response.onCompleted(); + } + }).build().start(); + ManagedChannel channel = null; + try { + channel = NettyChannelBuilder.forAddress("127.0.0.1", server.getPort()) + .usePlaintext().build(); + assertThat(RequestGrpc.newBlockingStub(channel).withDeadlineAfter(5, TimeUnit.SECONDS) + .request(payload())).isEqualTo(payload()); + } finally { + if (channel != null) { + channel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS); + } + server.shutdownNow().awaitTermination(5, TimeUnit.SECONDS); + } + } + + private static Payload payload() { + return Payload.newBuilder() + .setMetadata(Metadata.newBuilder().setType("ServerCheckRequest") + .putHeaders("requestId", "dependency-regression")) + .setBody(Any.newBuilder().setValue(ByteString.copyFromUtf8("{}"))) + .build(); + } +} diff --git a/services/pom.xml b/services/pom.xml index 6bc8bd362c..2671fe3d9e 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -64,6 +64,8 @@ 2.21.7 3.1.7 11.0.25 + 33.7.2-jre + 2.5.1 UTF-8 3.5.17 0.13.0 @@ -225,6 +227,23 @@ okhttp ${okhttp.version} + + + org.apache.dubbo + dubbo-registry-nacos + ${dubbo.version} + + + com.alibaba.nacos + nacos-client + + + + + com.google.guava + guava + ${guava.version} + org.testcontainers testcontainers-bom From 19bec2e44bf6dbeebc2055dc5f33d5587646ad3b Mon Sep 17 00:00:00 2001 From: DavidHLP <144919470+DavidHLP@users.noreply.github.com> Date: Sat, 31 Oct 2026 23:49:24 -0700 Subject: [PATCH 4/6] test: cover private development environment generation --- scripts/dev/init-env.sh | 3 +- scripts/test/cicd-contract.sh | 2 ++ scripts/test/init-env-contract.sh | 48 +++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 scripts/test/init-env-contract.sh diff --git a/scripts/dev/init-env.sh b/scripts/dev/init-env.sh index 36e33cdd05..be9d7d5538 100755 --- a/scripts/dev/init-env.sh +++ b/scripts/dev/init-env.sh @@ -12,7 +12,8 @@ usage() { Usage: ./scripts/dev/init-env.sh [--output PATH] [--force] Generates a private local development environment. Infrastructure credentials are -random; the documented application login is fixed for developer convenience. +random. The application username is admin; its random password is shared with +the browser test configuration in the generated private environment file. Existing files are preserved unless --force is supplied. EOF } diff --git a/scripts/test/cicd-contract.sh b/scripts/test/cicd-contract.sh index c525e5e401..bafc619fe1 100644 --- a/scripts/test/cicd-contract.sh +++ b/scripts/test/cicd-contract.sh @@ -18,3 +18,5 @@ bash "$ROOT_DIR/scripts/test/ssh-host-identity-contract.sh" python3 "$ROOT_DIR/scripts/test/verified-release-package-contract.py" -v python3 "$ROOT_DIR/scripts/test/test_acceptance_report.py" -v node "$ROOT_DIR/scripts/test/browser-auth-diagnostics.test.mjs" + +bash "$ROOT_DIR/scripts/test/init-env-contract.sh" diff --git a/scripts/test/init-env-contract.sh b/scripts/test/init-env-contract.sh new file mode 100644 index 0000000000..9300a36a36 --- /dev/null +++ b/scripts/test/init-env-contract.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Exercise the real generator in a disposable repository fixture; no Docker or network. +set -euo pipefail +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +FIXTURE="$(mktemp -d)" +trap 'rm -rf "$FIXTURE"' EXIT +mkdir -p "$FIXTURE/scripts" "$FIXTURE/docker" +cp -R "$ROOT_DIR/scripts/dev" "$FIXTURE/scripts/" +cp -R "$ROOT_DIR/docker/redis" "$FIXTURE/docker/" +chmod +x "$FIXTURE/docker/redis/generate-users-acl.sh" +GENERATOR="$FIXTURE/scripts/dev/init-env.sh" +bash "$GENERATOR" --output "$FIXTURE/first.env" >"$FIXTURE/first.log" +bash "$GENERATOR" --output "$FIXTURE/second.env" >"$FIXTURE/second.log" +python3 - "$FIXTURE" <<'PY' +import pathlib, stat, sys +root = pathlib.Path(sys.argv[1]) +def values(name): + path = root / name + assert stat.S_IMODE(path.stat().st_mode) == 0o600, 'Environment must be private (0600)' + return dict(line.split('=', 1) for line in path.read_text().splitlines() + if '=' in line and not line.startswith('#')) +a, b = values('first.env'), values('second.env') +for env in (a,b): + assert env['DEV_SEED_ADMIN_USERNAME'] == env['VITE_TEST_USERNAME'] == 'admin' + assert len(env['DEV_SEED_ADMIN_PASSWORD']) >= 32, 'Expected strong generated password' + assert env['DEV_SEED_ADMIN_PASSWORD'] == env['VITE_TEST_PASSWORD'], 'Browser password out of sync' +assert a['DEV_SEED_ADMIN_PASSWORD'] != b['DEV_SEED_ADMIN_PASSWORD'], 'Password reused across runs' +for log in root.glob('*.log'): + for env in (a,b): + assert env['DEV_SEED_ADMIN_PASSWORD'] not in log.read_text(), 'Password leaked to output' +PY +cp "$FIXTURE/first.env" "$FIXTURE/saved.env" +bash "$GENERATOR" --output "$FIXTURE/first.env" >"$FIXTURE/preserve.log" +cmp -s "$FIXTURE/saved.env" "$FIXTURE/first.env" || { echo 'Existing environment changed without --force' >&2; exit 1; } +bash "$GENERATOR" --output "$FIXTURE/first.env" --force >"$FIXTURE/force.log" +python3 - "$FIXTURE" <<'PY' +import pathlib, stat, sys +root=pathlib.Path(sys.argv[1]) +def values(name): + return dict(line.split('=',1) for line in (root/name).read_text().splitlines() + if '=' in line and not line.startswith('#')) +a,b=values('saved.env'),values('first.env') +assert a['DEV_SEED_ADMIN_PASSWORD'] != b['DEV_SEED_ADMIN_PASSWORD'], '--force did not rotate generated password' +assert b['DEV_SEED_ADMIN_PASSWORD'] == b['VITE_TEST_PASSWORD'], '--force broke browser sync' +assert stat.S_IMODE((root/'first.env').stat().st_mode)==0o600 +assert b['DEV_SEED_ADMIN_PASSWORD'] not in (root/'force.log').read_text() +PY +printf '%s\n' 'PASS: init-env randomness, browser sync, private mode, safe output, preservation and --force' From 64ed01b23e65ae4698e44955f6bf86aab94775b6 Mon Sep 17 00:00:00 2001 From: DavidHLP <144919470+DavidHLP@users.noreply.github.com> Date: Sun, 1 Nov 2026 01:13:37 -0700 Subject: [PATCH 5/6] fix: fail closed on bootstrap credentials and bound startup diagnostics --- docs/DEVELOPMENT.md | 4 +- scripts/ci/acceptance_report.py | 94 +++++++-- scripts/dev/up.sh | 21 +- scripts/test/cicd-contract.sh | 1 + scripts/test/test_acceptance_report.py | 185 +++++++++++++++++- scripts/test/test_dev_admin_bootstrap.py | 82 ++++++++ .../data/repository_corpus_manifest.json | 4 +- 7 files changed, 366 insertions(+), 25 deletions(-) create mode 100644 scripts/test/test_dev_admin_bootstrap.py diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 0670e93855..6e7f8e6f18 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -174,6 +174,8 @@ launcher 记录本次启动前日志偏移,旧标记不会被当成本次成 cookies、源码、PM2 state 或原始服务日志。退出时仅停止该测试 project/home,保留本机卷供 诊断;GitHub hosted runner 生命周期负责回收其临时磁盘。 +启动失败报告仅输出固定诊断词表、固定源码帧白名单及受限覆盖计数,不回显异常原文或 URL。每个 Owner 保留日志缺失、读取失败和尾部截断信息;信号为 false 只表示在受限日志尾部未观察到,不能据此认定服务未启动。Spring context 启动与投影 providers discovered 分别记录;历史成功与失败信号可以同时出现,不代表当前健康或因果关系。源码帧白名单随相关代码位置维护。 + 本机重现需在新 checkout 安装锁定依赖、PM2 与 Playwright Chromium,然后运行: ```bash @@ -697,7 +699,7 @@ enabled-owner wiring 或业务 journey。 `.env` 是本地部署密管输入,由 `./scripts/dev/init-env.sh` 生成并被 Git 忽略;`.env.example` 与 `.env.test.example` 是可提交模板,不包含可用凭据。实现配置以各服务 `application.yml`、Compose 和 `ecosystem.config.cjs` 为准。 -`.env.example` 的数据库、Redis ACL、Nacos、JWT、Meili 和开发用户凭据全部留空。首次本地初始化使用 `./scripts/dev/init-env.sh`,由初始化流程生成各角色独立的随机凭据并写入 ignored `.env`;开发管理员密码与 `VITE_TEST_PASSWORD` 使用同一份本次初始化值,验收入口继续从环境读取。部署环境从密钥系统注入。不要直接使用模板启动,也不要重用曾提交到 Git 的默认密码。Redis ACL 生成器在任一角色密码缺失时拒绝生成配置;已部署凭据的撤销或轮换需要单独执行相应运维流程。 +`.env.example` 的数据库、Redis ACL、Nacos、JWT、Meili 和开发用户凭据全部留空。首次本地初始化使用 `./scripts/dev/init-env.sh`,由初始化流程生成各角色独立的随机凭据并写入 ignored `.env`;开发管理员密码与 `VITE_TEST_PASSWORD` 使用同一份本次初始化值,验收入口继续从环境读取。启用开发管理员 bootstrap 且启动 Auth 时,`up.sh` 要求显式提供非空 `DEV_SEED_ADMIN_PASSWORD`,缺失或空值会在基础设施变更前拒绝启动,不再回退到固定口令;`--skip-bootstrap`、`--prepare-submission-owner`、禁用开发用户或不启动 Auth 时不强求该密码。部署环境从密钥系统注入。不要直接使用模板启动,也不要重用曾提交到 Git 的默认密码。Redis ACL 生成器在任一角色密码缺失时拒绝生成配置;已部署凭据的撤销或轮换需要单独执行相应运维流程。 ### 常用变量 diff --git a/scripts/ci/acceptance_report.py b/scripts/ci/acceptance_report.py index 1c4257dcec..621c4c2a12 100644 --- a/scripts/ci/acceptance_report.py +++ b/scripts/ci/acceptance_report.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Publish only bounded public exception types/source coordinates from test logs.""" +"""Publish fixed diagnostic vocabulary and bounded coverage, never raw log strings.""" import json import os import re @@ -8,30 +8,65 @@ LIMIT = 1_000_000 KINDS = re.compile(r"\b(?:org|com|java|javax|jakarta|io)\.(?:[A-Za-z_$][A-Za-z0-9_$]*\.)*[A-Za-z_$][A-Za-z0-9_$]*(?:Exception|Error)\b") FRAMES = re.compile(r"\bat (com\.ulticode\.[A-Za-z0-9_.$]+)\(([A-Za-z0-9_$]+\.java:[0-9]+)\)") +# Regexes detect candidate tokens only; output is intersected with this fixed +# vocabulary. A Java-looking secret or forged source frame is never serialized. +ALLOWED_KINDS = frozenset({ + "java.io.IOException", "java.io.InterruptedIOException", + "java.lang.IllegalStateException", "java.lang.OutOfMemoryError", + "java.net.ConnectException", "java.net.SocketTimeoutException", + "java.util.concurrent.TimeoutException", "javax.net.ssl.SSLHandshakeException", + "jakarta.validation.NoProviderFoundException", + "org.apache.dubbo.remoting.RemotingException", "org.apache.dubbo.rpc.RpcException", + "org.springframework.beans.factory.BeanCreationException", +}) +ALLOWED_FRAMES = frozenset({ + ("com.ulticode.submission.config.SubmissionDiscoveryStartupGate.await", "SubmissionDiscoveryStartupGate.java:40"), + ("com.ulticode.submission.config.SubmissionDiscoveryStartupGate.run", "SubmissionDiscoveryStartupGate.java:32"), + ("com.ulticode.submission.BackendSubmissionApplication.main", "BackendSubmissionApplication.java:38"), +}) +OWNERS = ("app", "submission", "admin", "auth", "judge", "notification", "search") +PRIVATE_LOGS = ("environment", "sandbox", "prepare", "cutover", "launch") PHASES = {"environment", "sandbox", "fresh-migrations", "backfill-and-cutover", "launch", "auth-environment", "fixtures", "browser-base", "browser-business", "complete"} def summary(paths): - kinds, frames, messages = set(), [], [] + paths = tuple(paths) + kinds, frames, messages, observed = set(), set(), [], [] + coverage = {"files_expected": len(paths), "files_seen": 0, "files_missing": 0, + "files_excluded": 0, "read_errors": 0, "tail_truncated": False} + unknown_kinds = unknown_frames = False for path in paths: - if path.is_symlink() or not path.is_file(): - continue try: + if path.is_symlink(): + coverage["files_excluded"] += 1 + continue + if not path.exists(): + coverage["files_missing"] += 1 + continue + if not path.is_file(): + coverage["files_excluded"] += 1 + continue with path.open("rb") as stream: - stream.seek(max(0, path.stat().st_size - LIMIT)) + size = os.fstat(stream.fileno()).st_size + coverage["tail_truncated"] |= size > LIMIT + stream.seek(max(0, size - LIMIT)) text = stream.read(LIMIT).decode("utf-8", errors="replace") + coverage["files_seen"] += 1 except OSError: + coverage["read_errors"] += 1 continue + observed.append(text) lines = text.splitlines() for index, line in enumerate(lines): if any(marker in line for marker in ("RpcException", "Caused by:", "Last error", "last error", "Exception:", "Error:")): messages.extend(lines[index:index + 3]) - kinds.update(KINDS.findall(text)) - for symbol, location in FRAMES.findall(text): - frame = {"symbol": symbol, "location": location} - if frame not in frames: - frames.append(frame) + candidates = set(KINDS.findall(text)) + kinds.update(candidates & ALLOWED_KINDS) + unknown_kinds |= bool(candidates - ALLOWED_KINDS) + candidates = set(FRAMES.findall(text)) + frames.update(candidates & ALLOWED_FRAMES) + unknown_frames |= bool(candidates - ALLOWED_FRAMES) context = "\n".join(messages) patterns = { "timeout": r"\b(?:timeout waiting|timed out|deadline exceeded|TimeoutException)\b", @@ -42,24 +77,51 @@ def summary(paths): "tls_identity": r"\b(?:SSLHandshakeException|certificate_unknown|untrusted peer|peer identity mismatch|tls handshake)\b", "validation_provider": r"\bNoProviderFoundException\b", } - return {"exception_classes": sorted(kinds)[:20], "public_source_frames": frames[-16:], + # Only booleans under fixed keys are emitted; never include matched text, + # exception messages, endpoints, process environment or arbitrary timestamps. + startup_patterns = { + "spring_context_started": r"\bStarted Backend(?:App|Submission|Admin|Auth|Judge|Notification|Search)Application in ", + "application_failed": r"APPLICATION FAILED TO START", + "submission_projection_providers_discovered": r"Submission projection providers discovered", + "submission_projection_discovery_deadline": r"Submission projection providers were not discovered before readiness deadline", + "nacos_client_starting": r"Client not connected, current status:STARTING|Client not connected, current status: STARTING", + "nacos_client_unhealthy": r"Client not connected, current status:UNHEALTHY|Client not connected, current status: UNHEALTHY", + "connection_refused": r"\bConnection refused\b", + "reactor_build_failed": r"Error: reactor install failed; fix compilation errors before starting the stack\.", + "auth_readiness_failed": r"ulticode-auth did not become healthy; cannot run dev-admin bootstrap\.", + "app_readiness_failed": r"backend-app did not become healthy; starting ulticode-judge anyway", + "stack_readiness_timed_out": r"Application readiness check timed out for:", + } + observed_text = "\n".join(observed) + coverage["complete"] = (bool(paths) and coverage["files_seen"] == len(paths) + and not coverage["tail_truncated"]) + # False signals mean "not observed in the inspected tails", not proof of + # absence. Coverage makes missing/unreadable/truncated evidence explicit. + return {"coverage": coverage, + "unlisted_exception_type_observed": unknown_kinds, + "unlisted_source_frame_observed": unknown_frames, + "startup_signals": {name: bool(re.search(pattern, observed_text)) for name, pattern in startup_patterns.items()}, + "exception_classes": sorted(kinds)[:20], "public_source_frames": [{"symbol": symbol, "location": location} for symbol, location in sorted(frames)], "rpc_failure_categories": {name: bool(re.search(pattern, context, re.I)) for name, pattern in patterns.items()}} def build_report(root, phase, exit_code, project): - private = summary((root / ".local/acceptance").glob("private-*.log")) + private = summary(root / ".local/acceptance" / f"private-{stage}.log" for stage in PRIVATE_LOGS) services = {} - for owner in ("app", "submission", "admin", "auth", "judge"): + for owner in OWNERS: item = summary([root / "logs" / f"backend-{owner}.{kind}.log" for kind in ("out", "err")]) - if item["exception_classes"] or item["public_source_frames"] or any(item["rpc_failure_categories"].values()): - services[owner] = item + # Keep every selected owner visible even when both log files are absent. + services[owner] = item return { "evidence": "disposable-real-services", "phase": phase if phase in PHASES else "unknown", "passed": exit_code == 0, - "project": project if re.fullmatch(r"ulticode-acceptance-[0-9]{1,20}-[0-9]{1,20}", project) else "unknown", + "project": "disposable" if re.fullmatch(r"ulticode-acceptance-[0-9]{1,20}-[0-9]{1,20}", project) else "unknown", "raw_logs_published": False, + "signals_semantics": "observed_in_bounded_log_tails_not_current_health", "exception_classes": private["exception_classes"], + "launcher_signals": private["startup_signals"], + "launcher_coverage": private["coverage"], "service_diagnostics": services, } diff --git a/scripts/dev/up.sh b/scripts/dev/up.sh index 9d8f36d8ba..9e11731675 100755 --- a/scripts/dev/up.sh +++ b/scripts/dev/up.sh @@ -38,6 +38,22 @@ capture_env_vars MIGRATION_DB_HOST MIGRATION_DB_PORT MIGRATION_DB_NAME MIGRATION DEV_SEED_USERS_ENABLED DEV_SEED_DATA_ENABLED \ DEV_SEED_ADMIN_USERNAME DEV_SEED_ADMIN_EMAIL DEV_SEED_ADMIN_PASSWORD DEV_SEED_ADMIN_ROLE +# Administrator bootstrap policy: share the predicate between fail-closed +# validation and execution; freeze it before sourcing a developer environment. +dev_admin_bootstrap_enabled() { + [[ "$SKIP_BOOTSTRAP" != true && "$PREPARE_SUBMISSION_OWNER" != true \ + && "$DEV_SEED_USERS_ENABLED" == true \ + && ",$PM2_APPS," == *,ulticode-auth,* ]] +} + +require_dev_admin_password() { + if dev_admin_bootstrap_enabled && [[ -z "${DEV_SEED_ADMIN_PASSWORD:-}" ]]; then + echo "DEV_SEED_ADMIN_PASSWORD is required when development administrator bootstrap is enabled; provide it in the private environment or disable bootstrap." >&2 + return 1 + fi +} +readonly -f dev_admin_bootstrap_enabled require_dev_admin_password + # ===== 参数解析 ===== SKIP_INSTALL=false SKIP_INFRA=false @@ -287,8 +303,8 @@ devstack_apply_scope "$DEV_SCOPE" : "${DEV_SEED_DATA_ENABLED:=true}" : "${DEV_SEED_ADMIN_USERNAME:=admin}" : "${DEV_SEED_ADMIN_EMAIL:=admin@localhost.test}" -: "${DEV_SEED_ADMIN_PASSWORD:=admin123}" : "${DEV_SEED_ADMIN_ROLE:=ADMIN}" +require_dev_admin_password || exit $? mapfile -t required_vars < <(devstack_required_vars "$DEV_MODE" "$FRONTEND_ONLY") for var in "${required_vars[@]}"; do @@ -620,8 +636,7 @@ if [[ "$REBUILD" == true && "$FRONTEND_ONLY" != true ]] && [[ ",$PM2_APPS," == * fi # ===== 步骤 4: dev-admin bootstrap (依赖 auth 的 Dubbo provider, 故先启动 auth) ===== -if [[ "$SKIP_BOOTSTRAP" != true && "$DEV_SEED_USERS_ENABLED" == "true" \ - && ",$PM2_APPS," == *,ulticode-auth,* ]]; then +if dev_admin_bootstrap_enabled; then # UserProvisioningAdapter 通过 Dubbo RPC 调用 backend-auth 的 # AccountManagementService 创建/恢复 admin (check=false: 容器可启动, 调用期才需要 provider)。 # 所以 bootstrap 前必须先拉起 ulticode-auth 并等待其 Dubbo provider 注册到 Nacos。 diff --git a/scripts/test/cicd-contract.sh b/scripts/test/cicd-contract.sh index bafc619fe1..d48b53b5b4 100644 --- a/scripts/test/cicd-contract.sh +++ b/scripts/test/cicd-contract.sh @@ -20,3 +20,4 @@ python3 "$ROOT_DIR/scripts/test/test_acceptance_report.py" -v node "$ROOT_DIR/scripts/test/browser-auth-diagnostics.test.mjs" bash "$ROOT_DIR/scripts/test/init-env-contract.sh" +python3 "$ROOT_DIR/scripts/test/test_dev_admin_bootstrap.py" -v diff --git a/scripts/test/test_acceptance_report.py b/scripts/test/test_acceptance_report.py index 0c70ba82ab..6892ad0a96 100644 --- a/scripts/test/test_acceptance_report.py +++ b/scripts/test/test_acceptance_report.py @@ -3,6 +3,10 @@ import json import tempfile import unittest +from unittest.mock import patch +import contextlib +import io +import os from pathlib import Path ROOT = Path(__file__).resolve().parents[2] @@ -34,8 +38,182 @@ def test_only_public_types_and_source_coordinates_are_serialized(self): self.assertTrue(report["service_diagnostics"]["app"]["rpc_failure_categories"]["serialization"]) self.assertFalse(report["raw_logs_published"]) self.assertIn("org.apache.dubbo.rpc.RpcException", report["exception_classes"]) - self.assertEqual(report["service_diagnostics"]["app"]["public_source_frames"], - [{"symbol": "com.ulticode.app.Probe.submit", "location": "Probe.java:42"}]) + self.assertEqual(report["service_diagnostics"]["app"]["public_source_frames"], []) + self.assertTrue(report["service_diagnostics"]["app"]["unlisted_source_frame_observed"]) + + def test_startup_diagnostics_are_fixed_booleans_not_exception_messages(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / "logs").mkdir() + (root / ".local/acceptance").mkdir(parents=True) + canaries = ["secret-value-canary", "https://private-user:private-password@private-host.invalid/path?token=private-token", + "Authorization: Bearer private-bearer", "DB_PASSWORD=private-db", "private-stack-body"] + untrusted = "\n".join(canaries) + (root / "logs/backend-submission.err.log").write_text( + "java.lang.IllegalStateException: Submission projection providers were not discovered before readiness deadline\n" + "jakarta.validation.NoProviderFoundException: " + untrusted) + (root / "logs/backend-app.out.log").write_text( + "Started BackendAppApplication in 12.0 seconds\n" + untrusted) + (root / ".local/acceptance/private-launch.log").write_text( + "Application readiness check timed out for: " + untrusted) + report = module.build_report(root, "launch", 1, "ulticode-acceptance-123-456") + self.assertTrue(report["launcher_signals"]["stack_readiness_timed_out"]) + submission = report["service_diagnostics"]["submission"] + self.assertTrue(submission["startup_signals"]["submission_projection_discovery_deadline"]) + self.assertTrue(submission["rpc_failure_categories"]["validation_provider"]) + self.assertTrue(report["service_diagnostics"]["app"]["startup_signals"]["spring_context_started"]) + for owner in report["service_diagnostics"].values(): + self.assertTrue(all(type(value) is bool for value in owner["startup_signals"].values())) + encoded = json.dumps(report) + for canary in canaries: + self.assertNotIn(canary, encoded) + self.assertNotIn("private-host", encoded) + self.assertNotIn("private-password", encoded) + self.assertFalse(report["passed"]) + + def test_generic_validation_exception_does_not_prove_discovery_deadline(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / "logs").mkdir() + (root / "logs/backend-submission.err.log").write_text( + "jakarta.validation.NoProviderFoundException: optional validation provider absent") + report = module.build_report(root, "launch", 1, "ulticode-acceptance-123-456") + self.assertFalse(report["service_diagnostics"]["submission"]["startup_signals"]["submission_projection_discovery_deadline"]) + self.assertFalse(report["launcher_signals"]["stack_readiness_timed_out"]) + + def test_forged_java_types_and_frames_never_escape_fixed_vocabulary(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / "logs").mkdir() + canaries = ["java.syntheticPrivateCanaryException", "com.ulticode.privateCanary.PasswordError", + "com.ulticode.secretCanary.method", "SecretCanary.java:123", + "SubmissionDiscoveryStartupGate.java:987654321"] + (root / "logs/backend-submission.err.log").write_text( + canaries[0] + ": password=secret-canary\n" + canaries[1] + + "\n at " + canaries[2] + "(" + canaries[3] + ")" + + "\n at com.ulticode.submission.config.SubmissionDiscoveryStartupGate.await(" + canaries[4] + ")" + + "\n java.lang.IllegalStateException: secret-canary" + + "\n at com.ulticode.submission.config.SubmissionDiscoveryStartupGate.await(SubmissionDiscoveryStartupGate.java:40)") + report = module.build_report(root, "launch", 1, "private-project-canary") + item = report["service_diagnostics"]["submission"] + self.assertEqual(item["exception_classes"], ["java.lang.IllegalStateException"]) + self.assertEqual(item["public_source_frames"], [{ + "symbol": "com.ulticode.submission.config.SubmissionDiscoveryStartupGate.await", + "location": "SubmissionDiscoveryStartupGate.java:40"}]) + self.assertTrue(item["unlisted_exception_type_observed"]) + self.assertTrue(item["unlisted_source_frame_observed"]) + for canary in canaries + ["secret-canary", "private-project-canary"]: + self.assertNotIn(canary, json.dumps(report)) + + def test_missing_logs_are_unknown_coverage_not_omitted_services(self): + with tempfile.TemporaryDirectory() as directory: + report = module.build_report(Path(directory), "launch", 1, "ulticode-acceptance-1-2") + self.assertEqual(set(report["service_diagnostics"]), set(module.OWNERS)) + for item in report["service_diagnostics"].values(): + self.assertEqual(item["coverage"]["files_expected"], 2) + self.assertEqual(item["coverage"]["files_seen"], 0) + self.assertEqual(item["coverage"]["files_missing"], 2) + self.assertFalse(item["coverage"]["complete"]) + self.assertEqual(report["launcher_coverage"]["files_missing"], len(module.PRIVATE_LOGS)) + + def test_truncated_prefix_does_not_claim_absence_or_complete_coverage(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "log" + path.write_text("Submission projection providers discovered\n" + "x" * 256) + with patch.object(module, "LIMIT", 128): + item = module.summary([path]) + self.assertTrue(item["coverage"]["tail_truncated"]) + self.assertFalse(item["coverage"]["complete"]) + self.assertFalse(item["startup_signals"]["submission_projection_providers_discovered"]) + path.write_text("x" * 256 + "\nSubmission projection providers discovered\n") + with patch.object(module, "LIMIT", 128): + item = module.summary([path]) + self.assertTrue(item["coverage"]["tail_truncated"]) + self.assertTrue(item["startup_signals"]["submission_projection_providers_discovered"]) + + def test_read_error_has_bounded_count_without_exception_detail(self): + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "log" + path.write_text("unused") + with patch.object(Path, "open", side_effect=PermissionError("private-file-canary")): + item = module.summary([path]) + self.assertEqual(item["coverage"]["read_errors"], 1) + self.assertEqual(item["coverage"]["files_seen"], 0) + self.assertFalse(item["coverage"]["complete"]) + self.assertNotIn("private-file-canary", json.dumps(item)) + + def test_notification_search_and_positive_submission_discovery(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / "logs").mkdir() + for owner, name in (("notification", "Notification"), ("search", "Search"), ("submission", "Submission")): + (root / f"logs/backend-{owner}.out.log").write_text( + f"Started Backend{name}Application in 1.0 seconds\n" + + ("Submission projection providers discovered\n" if owner == "submission" else "")) + (root / f"logs/backend-{owner}.err.log").write_text("") + report = module.build_report(root, "complete", 0, "ulticode-acceptance-1-2") + self.assertTrue(report["passed"]) + for owner in ("notification", "search", "submission"): + self.assertTrue(report["service_diagnostics"][owner]["coverage"]["complete"]) + self.assertTrue(report["service_diagnostics"][owner]["startup_signals"]["spring_context_started"]) + self.assertTrue(report["service_diagnostics"]["submission"]["startup_signals"]["submission_projection_providers_discovered"]) + self.assertFalse(report["service_diagnostics"]["submission"]["startup_signals"]["submission_projection_discovery_deadline"]) + + def test_mixed_restart_success_and_failure_are_observations_not_current_health(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / "logs").mkdir() + (root / "logs/backend-submission.out.log").write_text( + "Started BackendSubmissionApplication in 1 second\n" + "Submission projection providers discovered\n" + "APPLICATION FAILED TO START\n" + "Submission projection providers were not discovered before readiness deadline\n") + report = module.build_report(root, "launch", 1, "ulticode-acceptance-1-2") + item = report["service_diagnostics"]["submission"]["startup_signals"] + self.assertTrue(item["spring_context_started"]) + self.assertTrue(item["submission_projection_providers_discovered"]) + self.assertTrue(item["submission_projection_discovery_deadline"]) + self.assertFalse(report["passed"]) + self.assertEqual(report["signals_semantics"], "observed_in_bounded_log_tails_not_current_health") + + def test_each_startup_signal_has_positive_and_negative_coverage(self): + examples = { + "spring_context_started": "Started BackendAppApplication in 1 second", + "application_failed": "APPLICATION FAILED TO START", + "submission_projection_providers_discovered": "Submission projection providers discovered", + "submission_projection_discovery_deadline": "Submission projection providers were not discovered before readiness deadline", + "nacos_client_starting": "Client not connected, current status: STARTING", + "nacos_client_unhealthy": "Client not connected, current status:UNHEALTHY", + "connection_refused": "Connection refused", + "reactor_build_failed": "Error: reactor install failed; fix compilation errors before starting the stack.", + "auth_readiness_failed": "ulticode-auth did not become healthy; cannot run dev-admin bootstrap.", + "app_readiness_failed": "backend-app did not become healthy; starting ulticode-judge anyway", + "stack_readiness_timed_out": "Application readiness check timed out for:", + } + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / "log" + path.write_text("ordinary non-diagnostic output") + self.assertFalse(any(module.summary([path])["startup_signals"].values())) + for key, example in examples.items(): + with self.subTest(key=key): + path.write_text(example + "\nhttps://secret-user:secret-password@private.invalid/token") + item = module.summary([path]) + self.assertTrue(item["startup_signals"][key]) + self.assertNotIn("secret-user", json.dumps(item)) + self.assertNotIn("secret-password", json.dumps(item)) + self.assertEqual(set(examples), set(item["startup_signals"])) + + def test_success_main_writes_bounded_report_without_failure_output(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + with patch.object(Path, "cwd", return_value=root), patch.dict(os.environ, { + "ACCEPTANCE_PHASE": "complete", "ACCEPTANCE_EXIT": "0", "COMPOSE_PROJECT_NAME": "ulticode-acceptance-1-2"}), contextlib.redirect_stdout(io.StringIO()) as output: + self.assertEqual(module.main(), 0) + self.assertEqual(output.getvalue(), "") + report = json.loads((root / ".local/acceptance/installation.json").read_text()) + self.assertTrue(report["passed"]) + self.assertFalse(report["raw_logs_published"]) + self.assertEqual(report["project"], "disposable") def test_symlinks_unrelated_files_and_untrusted_metadata_are_excluded(self): with tempfile.TemporaryDirectory() as directory: @@ -46,7 +224,8 @@ def test_symlinks_unrelated_files_and_untrusted_metadata_are_excluded(self): (root / "logs/backend-app.err.log").symlink_to(outside) (root / "logs/unrelated.log").write_text(outside.read_text()) report = module.build_report(root, "private-canary", 1, "private-canary") - self.assertEqual(report["service_diagnostics"], {}) + self.assertEqual(report["service_diagnostics"]["app"]["coverage"]["files_excluded"], 1) + self.assertEqual(report["service_diagnostics"]["app"]["exception_classes"], []) self.assertEqual(report["phase"], "unknown") self.assertEqual(report["project"], "unknown") self.assertNotIn("private-canary", json.dumps(report)) diff --git a/scripts/test/test_dev_admin_bootstrap.py b/scripts/test/test_dev_admin_bootstrap.py new file mode 100644 index 0000000000..8c5a68abc1 --- /dev/null +++ b/scripts/test/test_dev_admin_bootstrap.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +"""Run the launcher's actual frozen bootstrap policy without starting services.""" +import os +from pathlib import Path +import re +import subprocess +import tempfile +import unittest + +ROOT = Path(__file__).resolve().parents[2] +UP = ROOT / "scripts/dev/up.sh" +POLICY = re.compile(r"^dev_admin_bootstrap_enabled\(\) \{\n.*?^readonly -f dev_admin_bootstrap_enabled require_dev_admin_password\n", re.M | re.S) + + +class BootstrapPasswordTests(unittest.TestCase): + def run_policy(self, password=None, **overrides): + source = UP.read_text() + match = POLICY.search(source) + self.assertIsNotNone(match, "Actual bootstrap policy must remain directly testable") + environment = dict(os.environ) + environment.pop("DEV_SEED_ADMIN_PASSWORD", None) + environment.update(SKIP_BOOTSTRAP="false", PREPARE_SUBMISSION_OWNER="false", + DEV_SEED_USERS_ENABLED="true", PM2_APPS="ulticode-auth,ulticode-app") + environment.update(overrides) + if password is not None: + environment["DEV_SEED_ADMIN_PASSWORD"] = password + with tempfile.TemporaryDirectory() as directory: + policy = Path(directory) / "policy.sh" + policy.write_text(match.group()) + result = subprocess.run(["bash", "-c", '''set -euo pipefail +source "$1" +before="${DEV_SEED_ADMIN_PASSWORD-}" +before_set="${DEV_SEED_ADMIN_PASSWORD+x}" +require_dev_admin_password +[[ "${DEV_SEED_ADMIN_PASSWORD-}" == "$before" ]] +[[ "${DEV_SEED_ADMIN_PASSWORD+x}" == "$before_set" ]] +''', "bootstrap-contract", str(policy)], env=environment, text=True, capture_output=True) + self.assertEqual(result.stdout, "") + if password: + self.assertNotIn(password, result.stderr) + return result + + def test_enabled_bootstrap_rejects_missing_password(self): + result = self.run_policy() + self.assertNotEqual(result.returncode, 0) + self.assertIn("DEV_SEED_ADMIN_PASSWORD is required", result.stderr) + + def test_enabled_bootstrap_rejects_empty_password(self): + self.assertNotEqual(self.run_policy("").returncode, 0) + + def test_explicit_password_is_preserved_without_printing(self): + self.assertEqual(self.run_policy("test-only-explicit-value=$with punctuation").returncode, 0) + + def test_skip_bootstrap_allows_missing_password(self): + self.assertEqual(self.run_policy(SKIP_BOOTSTRAP="true").returncode, 0) + + def test_prepare_owner_without_bootstrap_allows_missing_password(self): + self.assertEqual(self.run_policy(PREPARE_SUBMISSION_OWNER="true").returncode, 0) + + def test_disabled_dev_users_allow_empty_password(self): + self.assertEqual(self.run_policy("", DEV_SEED_USERS_ENABLED="false").returncode, 0) + + def test_no_auth_selection_allows_missing_password(self): + self.assertEqual(self.run_policy(PM2_APPS="ulticode-app,ulticode-judge").returncode, 0) + + def test_similarly_named_service_is_not_auth(self): + self.assertEqual(self.run_policy(PM2_APPS="ulticode-auth-other").returncode, 0) + + def test_policy_is_frozen_before_env_and_checked_before_side_effects(self): + source = UP.read_text() + self.assertNotRegex(source, r"DEV_SEED_ADMIN_PASSWORD:=") + frozen = source.index("readonly -f dev_admin_bootstrap_enabled require_dev_admin_password") + self.assertLess(frozen, source.index("\nload_env_file\n")) + check = source.index("require_dev_admin_password || exit $?") + for marker in ("\nmaterialize_redis_acl ", "\nprovision_submission_migration_principal()", "\nif dev_admin_bootstrap_enabled; then", "\npreflight_service_ports\n"): + self.assertLess(check, source.index(marker), marker) + self.assertEqual(source.count("if dev_admin_bootstrap_enabled; then"), 1) + self.assertEqual(source.count("require_dev_admin_password || exit $?"), 1) + + +if __name__ == "__main__": + unittest.main() diff --git a/services/agent/data/repository_corpus_manifest.json b/services/agent/data/repository_corpus_manifest.json index e19fba8cb7..aa638f13b5 100644 --- a/services/agent/data/repository_corpus_manifest.json +++ b/services/agent/data/repository_corpus_manifest.json @@ -29,8 +29,8 @@ }, { "doc_id": "repository-development", - "version": "sha256-f04b71c7f56d0f79b20b738370161ab52ee149afec9e9c10c2fc5f0710c6db36", - "chunk_id": "repository-development:sha256-f04b71c7f56d0f79b20b738370161ab52ee149afec9e9c10c2fc5f0710c6db36:1", + "version": "sha256-fefbf5a428fcce530e78e28977e2b937a3abaa78db557d476d8b1bfe1ece35d0", + "chunk_id": "repository-development:sha256-fefbf5a428fcce530e78e28977e2b937a3abaa78db557d476d8b1bfe1ece35d0:1", "source_path": "docs/DEVELOPMENT.md", "access_scope": "repository-public", "sample_kind": "real", From 86f334b6bd3dda2bf1b0f2e6b92ede7a65efee6d Mon Sep 17 00:00:00 2001 From: DavidHLP <144919470+DavidHLP@users.noreply.github.com> Date: Sun, 1 Nov 2026 01:45:29 -0700 Subject: [PATCH 6/6] ci: capture bounded final readiness and dependency diagnostics --- docs/DEVELOPMENT.md | 4 + scripts/ci/acceptance_report.py | 50 ++++++- scripts/dev/readiness-diagnostics.py | 71 +++++++++ scripts/dev/up.sh | 71 +++++++-- scripts/test/cicd-contract.sh | 2 + scripts/test/test_acceptance_report.py | 2 +- scripts/test/test_dev_readiness.py | 141 ++++++++++++++++++ .../data/repository_corpus_manifest.json | 4 +- 8 files changed, 328 insertions(+), 17 deletions(-) create mode 100644 scripts/dev/readiness-diagnostics.py create mode 100644 scripts/test/test_dev_readiness.py diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 6e7f8e6f18..b2095db24b 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -802,3 +802,7 @@ Codex 前缀规则只能识别已列出的参数排列,无法覆盖任意脚 - [部署与回滚](OPERATIONS.md#部署发布与回滚) - [Services 问题注册表](../services/docs/SERVICES_ISSUES.md) - [Worker SLO Runbook](../services/docs/WORKER_SLO_RUNBOOK.md) + +### 有界启动失败诊断 + +启动超时不放宽就绪门禁。失败报告记录最后一轮所选服务的固定 readiness 结果(HTTP 状态枚举或 PM2/banner 分类),而不是用历史启动成功行判断当前状态。额外依赖诊断只读取固定 IPv4 loopback 健康端点,限制 8 KiB 响应、每 socket 5 秒,并以 25 秒总时限和 2 秒强制终止上限约束整个子进程;不跟随跳转、不传认证、不输出原始响应或地址。只发布固定 db/redis/storage/problemOwnerRpc 的 up/down/unknown 枚举。额外探测发生在最终门禁轮次之后,不代表同一时刻;缺失探测或未选服务保留 unknown,不能当作健康或失败。日志 startup_signals 仍只表示有界日志尾部曾观察到的信号,成功与失败可同时存在。 diff --git a/scripts/ci/acceptance_report.py b/scripts/ci/acceptance_report.py index 621c4c2a12..683c728fab 100644 --- a/scripts/ci/acceptance_report.py +++ b/scripts/ci/acceptance_report.py @@ -30,7 +30,44 @@ "auth-environment", "fixtures", "browser-base", "browser-business", "complete"} -def summary(paths): +FINAL_APPS = tuple("ulticode-" + owner for owner in OWNERS) + ("ulticode-core", "ulticode-9002", "ulticode-9003", "ulticode-9004") +HTTP_DETAILS = ("http_200", "http_401", "http_403", "http_404", "http_500", "http_502", "http_503", "http_504", "http_unreachable", "http_other") +PM2_DETAILS = ("pm2_not_online", "pm2_online_no_banner_required", "pm2_log_missing", "pm2_banner_missing", "pm2_banner_observed", "unknown_probe_kind") +HEALTH_COMPONENTS = { + "ulticode-auth": ("db", "redis"), + "ulticode-admin": ("db", "redis", "problemOwnerRpc", "storage"), + "ulticode-app": ("db", "redis", "storage"), + "ulticode-notification": ("db", "redis"), +} + + +def final_probes(text): + """Last explicit final-cycle markers only; all serialized values are fixed.""" + details = set(HTTP_DETAILS) | set(PM2_DETAILS) | {a + "/" + b for a in HTTP_DETAILS for b in HTTP_DETAILS} + readiness = {app: {"observed": False, "state": "unknown", "detail": "unknown"} for app in FINAL_APPS} + dependencies = {app: {"observed": False, "probe": "unknown", "components": dict.fromkeys(keys, "unknown")} + for app, keys in HEALTH_COMPONENTS.items()} + for line in text.splitlines(): + match = re.fullmatch(r"ULTICODE_FINAL_READINESS app=([^ ]+) state=(ready|failed) detail=([^ ]+)", line) + if match: + app, state, detail = match.groups() + if app in readiness and detail in details: + readiness[app] = {"observed": True, "state": state, "detail": detail} + match = re.fullmatch(r"ULTICODE_FINAL_HEALTH app=([^ ]+) state=(http_200|http_503|unreachable|http_other|invalid_response|oversized_response)", line) + if match: + app, state = match.groups() + if app in dependencies: + dependencies[app]["observed"] = True + dependencies[app]["probe"] = state + match = re.fullmatch(r"ULTICODE_FINAL_COMPONENT app=([^ ]+) component=([^ ]+) state=(up|down|unknown)", line) + if match: + app, key, state = match.groups() + if app in dependencies and key in dependencies[app]["components"]: + dependencies[app]["components"][key] = state + return {"final_readiness": readiness, "final_dependency_probes": dependencies} + + +def summary(paths, include_final_probes=False): paths = tuple(paths) kinds, frames, messages, observed = set(), set(), [], [] coverage = {"files_expected": len(paths), "files_seen": 0, "files_missing": 0, @@ -80,7 +117,7 @@ def summary(paths): # Only booleans under fixed keys are emitted; never include matched text, # exception messages, endpoints, process environment or arbitrary timestamps. startup_patterns = { - "spring_context_started": r"\bStarted Backend(?:App|Submission|Admin|Auth|Judge|Notification|Search)Application in ", + "spring_context_started": r"\bStarted (?:Backend(?:App|Submission|Admin|Auth|Judge|Notification)Application|SearchWorkerApplication) in ", "application_failed": r"APPLICATION FAILED TO START", "submission_projection_providers_discovered": r"Submission projection providers discovered", "submission_projection_discovery_deadline": r"Submission projection providers were not discovered before readiness deadline", @@ -97,16 +134,19 @@ def summary(paths): and not coverage["tail_truncated"]) # False signals mean "not observed in the inspected tails", not proof of # absence. Coverage makes missing/unreadable/truncated evidence explicit. - return {"coverage": coverage, + result = {"coverage": coverage, "unlisted_exception_type_observed": unknown_kinds, "unlisted_source_frame_observed": unknown_frames, "startup_signals": {name: bool(re.search(pattern, observed_text)) for name, pattern in startup_patterns.items()}, "exception_classes": sorted(kinds)[:20], "public_source_frames": [{"symbol": symbol, "location": location} for symbol, location in sorted(frames)], "rpc_failure_categories": {name: bool(re.search(pattern, context, re.I)) for name, pattern in patterns.items()}} + if include_final_probes: + result.update(final_probes(observed_text)) + return result def build_report(root, phase, exit_code, project): - private = summary(root / ".local/acceptance" / f"private-{stage}.log" for stage in PRIVATE_LOGS) + private = summary((root / ".local/acceptance" / f"private-{stage}.log" for stage in PRIVATE_LOGS), include_final_probes=True) services = {} for owner in OWNERS: item = summary([root / "logs" / f"backend-{owner}.{kind}.log" for kind in ("out", "err")]) @@ -122,6 +162,8 @@ def build_report(root, phase, exit_code, project): "exception_classes": private["exception_classes"], "launcher_signals": private["startup_signals"], "launcher_coverage": private["coverage"], + "final_readiness": private["final_readiness"], + "final_dependency_probes": private["final_dependency_probes"], "service_diagnostics": services, } diff --git a/scripts/dev/readiness-diagnostics.py b/scripts/dev/readiness-diagnostics.py new file mode 100644 index 0000000000..92ffb10aeb --- /dev/null +++ b/scripts/dev/readiness-diagnostics.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +"""Bounded loopback-only diagnostics; emit fixed enums, never response/log text.""" +import http.client +import json +import sys + +LIMIT = 8192 +TARGETS = { + "ulticode-auth": (9101, "/api/v1/auth/health/ready", ("db", "redis")), + "ulticode-admin": (9102, "/api/v1/admin/health/ready", ("db", "redis", "problemOwnerRpc", "storage")), + "ulticode-app": (9103, "/api/v1/app/health/ready", ("db", "redis", "storage")), + "ulticode-notification": (9105, "/api/v1/notification/health/ready", ("db", "redis")), +} + + +def classify(status, body, keys): + components = dict.fromkeys(keys, "unknown") + if len(body) > LIMIT: + return "oversized_response", components + if status not in (200, 503): + return "http_other", components + try: + document = json.loads(body) + except (ValueError, UnicodeError): + return "invalid_response", components + if not isinstance(document, dict) or not isinstance(document.get("components"), dict): + return "invalid_response", components + for key in keys: + value = document["components"].get(key) + if value == "UP": + components[key] = "up" + elif value == "DOWN": + components[key] = "down" + return "http_200" if status == 200 else "http_503", components + + +def probe(app, connection_factory=http.client.HTTPConnection): + port, path, keys = TARGETS[app] + result, components = "unreachable", dict.fromkeys(keys, "unknown") + connection = None + try: + # No ambient proxy, redirects, authentication or user-controlled URL. + connection = connection_factory("127.0.0.1", port, timeout=5) + connection.request("GET", path) + response = connection.getresponse() + result, components = classify(response.status, response.read(LIMIT + 1), keys) + except (OSError, http.client.HTTPException, ValueError): + pass + finally: + if connection is not None: + try: + connection.close() + except OSError: + pass + return result, components + + +def main(argv): + selected = set(argv[0].split(",")) if len(argv) == 1 else set() + for app in TARGETS: + if app not in selected: + continue + result, components = probe(app) + print(f"ULTICODE_FINAL_HEALTH app={app} state={result}") + for key, value in components.items(): + print(f"ULTICODE_FINAL_COMPONENT app={app} component={key} state={value}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main(sys.argv[1:])) diff --git a/scripts/dev/up.sh b/scripts/dev/up.sh index 9e11731675..d42f741172 100755 --- a/scripts/dev/up.sh +++ b/scripts/dev/up.sh @@ -887,17 +887,36 @@ check_url() { } # 同时尝试 IPv4 与 IPv6 回环, 任一返回 200 即就绪, 避免绑定地址族导致的假性失败。 +readiness_http_detail() { + case "$1" in + 200|401|403|404|500|502|503|504) printf 'http_%s' "$1" ;; + 000|000000|'') printf 'http_unreachable' ;; + *) printf 'http_other' ;; + esac +} + check_port() { - local port="$1" path="${2:-/}" - [[ "$(check_url "http://127.0.0.1:${port}${path}")" == "200" ]] && return 0 - [[ "$(check_url "http://[::1]:${port}${path}")" == "200" ]] && return 0 + local port="$1" path="${2:-/}" ipv4 ipv6 + ipv4="$(check_url "http://127.0.0.1:${port}${path}")" + if [[ "$ipv4" == "200" ]]; then + READINESS_DETAIL=http_200 + return 0 + fi + ipv6="$(check_url "http://[::1]:${port}${path}")" + if [[ "$ipv6" == "200" ]]; then + READINESS_DETAIL=http_200 + return 0 + fi + READINESS_DETAIL="$(readiness_http_detail "$ipv4")/$(readiness_http_detail "$ipv6")" return 1 } check_pm2_online() { local app="$1" log + READINESS_DETAIL=pm2_not_online pm2_load_records pm2_record_is_online "$app" || return 1 + READINESS_DETAIL=pm2_online_no_banner_required local banner banner="$(devstack_readiness_banner "$app")" @@ -917,20 +936,49 @@ check_pm2_online() { fi # 不用 grep -q: 它在首个匹配即提前退出, tail 收到 SIGPIPE(141), # 在 set -o pipefail 下管道非零 → 假阴性。改为读完全部输入并丢弃输出。 - tail -c +$((offset + 1)) "$log" 2>/dev/null \ - | grep "$banner" >/dev/null 2>&1 + READINESS_DETAIL=pm2_log_missing + [[ -f "$log" ]] || return 1 + READINESS_DETAIL=pm2_banner_missing + if tail -c +$((offset + 1)) "$log" 2>/dev/null \ + | grep "$banner" >/dev/null 2>&1; then + READINESS_DETAIL=pm2_banner_observed + return 0 + fi + return 1 } -for _ in $(seq 1 "$DEVSTACK_SERVICE_READINESS_ATTEMPTS"); do - all_ok=true +# Record only the latest completed probe cycle, not historical startup banners. +# Values are fixed categories; no URLs, response bodies or environment values. +declare -A READINESS_RESULTS=() +check_selected_readiness() { + local readiness app readiness_kind readiness_port readiness_path state all_ok=true + READINESS_RESULTS=() for readiness in "${SELECTED_READINESS[@]}"; do IFS='|' read -r app readiness_kind readiness_port readiness_path <<< "$readiness" + state=ready + READINESS_DETAIL=unknown_probe_kind case "$readiness_kind" in - http) check_port "$readiness_port" "$readiness_path" || all_ok=false ;; - pm2) check_pm2_online "$app" || all_ok=false ;; + http) check_port "$readiness_port" "$readiness_path" || state=failed ;; + pm2) check_pm2_online "$app" || state=failed ;; + *) state=failed ;; esac + READINESS_RESULTS["$app"]="$state $READINESS_DETAIL" + [[ "$state" == ready ]] || all_ok=false done - if [[ "$all_ok" == true ]]; then + [[ "$all_ok" == true ]] +} + +emit_final_readiness() { + local readiness app state detail + for readiness in "${SELECTED_READINESS[@]}"; do + IFS='|' read -r app _ <<< "$readiness" + read -r state detail <<< "${READINESS_RESULTS[$app]:-failed unknown_probe_kind}" + printf 'ULTICODE_FINAL_READINESS app=%s state=%s detail=%s\n' "$app" "$state" "$detail" >&2 + done +} + +for _ in $(seq 1 "$DEVSTACK_SERVICE_READINESS_ATTEMPTS"); do + if check_selected_readiness; then printf 'Development stack is ready (scope: %s; mode: %s; services: %s).\n' \ "$DEV_SCOPE" "$DEV_MODE" "$PM2_APPS" echo "Owner migrations: $(devstack_apps_csv "${DEVSTACK_OWNER_MIGRATION_ORDER[@]}")" @@ -961,6 +1009,9 @@ for _ in $(seq 1 "$DEVSTACK_SERVICE_READINESS_ATTEMPTS"); do sleep "$DEVSTACK_READINESS_INTERVAL_SECONDS" done +emit_final_readiness +# Failure-only read probes: fixed loopback endpoints and bounded enum output. +timeout --kill-after=2s 25s python3 -u "$ROOT_DIR/scripts/dev/readiness-diagnostics.py" "$PM2_APPS" 2>/dev/null || true echo "Application readiness check timed out for: $PM2_APPS" >&2 pm2 status >&2 || true echo >&2 diff --git a/scripts/test/cicd-contract.sh b/scripts/test/cicd-contract.sh index d48b53b5b4..960e3f2f7e 100644 --- a/scripts/test/cicd-contract.sh +++ b/scripts/test/cicd-contract.sh @@ -21,3 +21,5 @@ node "$ROOT_DIR/scripts/test/browser-auth-diagnostics.test.mjs" bash "$ROOT_DIR/scripts/test/init-env-contract.sh" python3 "$ROOT_DIR/scripts/test/test_dev_admin_bootstrap.py" -v + +python3 "$ROOT_DIR/scripts/test/test_dev_readiness.py" -v diff --git a/scripts/test/test_acceptance_report.py b/scripts/test/test_acceptance_report.py index 6892ad0a96..7545f59f2c 100644 --- a/scripts/test/test_acceptance_report.py +++ b/scripts/test/test_acceptance_report.py @@ -148,7 +148,7 @@ def test_notification_search_and_positive_submission_discovery(self): (root / "logs").mkdir() for owner, name in (("notification", "Notification"), ("search", "Search"), ("submission", "Submission")): (root / f"logs/backend-{owner}.out.log").write_text( - f"Started Backend{name}Application in 1.0 seconds\n" + f"Started {'SearchWorkerApplication' if owner == 'search' else 'Backend' + name + 'Application'} in 1.0 seconds\n" + ("Submission projection providers discovered\n" if owner == "submission" else "")) (root / f"logs/backend-{owner}.err.log").write_text("") report = module.build_report(root, "complete", 0, "ulticode-acceptance-1-2") diff --git a/scripts/test/test_dev_readiness.py b/scripts/test/test_dev_readiness.py new file mode 100644 index 0000000000..e8259339e9 --- /dev/null +++ b/scripts/test/test_dev_readiness.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +"""Offline contracts: no live services, raw responses or relaxed readiness.""" +import contextlib +import importlib.util +import io +import json +from pathlib import Path +import subprocess +import tempfile +import time +import unittest +from unittest.mock import patch + +ROOT = Path(__file__).resolve().parents[2] +def load(name, path): + spec = importlib.util.spec_from_file_location(name, ROOT / path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module +health = load('health', 'scripts/dev/readiness-diagnostics.py') +report = load('report', 'scripts/ci/acceptance_report.py') +SOURCE = (ROOT / 'scripts/dev/up.sh').read_text() +FUNCTIONS = SOURCE[SOURCE.index('check_url() {'):SOURCE.index('for _ in $(seq 1 "$DEVSTACK_SERVICE_READINESS_ATTEMPTS"); do', SOURCE.index('check_url() {'))] + +class ReadinessTests(unittest.TestCase): + def shell(self, body): + with tempfile.TemporaryDirectory() as root: + return subprocess.run(['bash', '-c', 'set -euo pipefail\nROOT_DIR="$1"\n' + FUNCTIONS + '\n' + body, 'test', root], text=True, capture_output=True, check=True).stdout + + def test_ipv4_ipv6_success_and_failure_enums(self): + result = self.shell(''' +check_url() { case "$1" in *127.0.0.1*) echo 503;; *) echo 200;; esac; } +check_port 9103 /fixed +[[ "$READINESS_DETAIL" == http_200 ]] +check_url() { echo 'private-value'; } +if check_port 9103 /fixed; then exit 1; fi +[[ "$READINESS_DETAIL" == http_other/http_other ]] +check_url() { echo 503; } +if check_port 9103 /fixed; then exit 1; fi +[[ "$READINESS_DETAIL" == http_503/http_503 ]] +echo PASS +''') + self.assertEqual(result.strip(), 'PASS') + + def test_pm2_requires_online_and_current_banner(self): + self.shell(''' +pm2_load_records() { :; } +pm2_record_is_online() { false; } +devstack_readiness_banner() { echo 'Started Worker'; } +if check_pm2_online ulticode-submission; then exit 1; fi +[[ "$READINESS_DETAIL" == pm2_not_online ]] +pm2_record_is_online() { true; } +if check_pm2_online ulticode-submission; then exit 1; fi +[[ "$READINESS_DETAIL" == pm2_log_missing ]] +mkdir -p "$ROOT_DIR/logs" +echo 'Started Worker' > "$ROOT_DIR/logs/backend-submission.out.log" +wc -c < "$ROOT_DIR/logs/backend-submission.out.log" > "$ROOT_DIR/logs/.submission-ready-offset" +if check_pm2_online ulticode-submission; then exit 1; fi +[[ "$READINESS_DETAIL" == pm2_banner_missing ]] +echo 'Started Worker' >> "$ROOT_DIR/logs/backend-submission.out.log" +check_pm2_online ulticode-submission +[[ "$READINESS_DETAIL" == pm2_banner_observed ]] +''') + + def test_last_cycle_replaces_earlier_failure(self): + self.shell(''' +SELECTED_READINESS=('ulticode-app|http|9103|/fixed' 'ulticode-search|pm2|0|') +check_port() { READINESS_DETAIL=http_503/http_503; return 1; } +check_pm2_online() { READINESS_DETAIL=pm2_banner_observed; return 0; } +if check_selected_readiness; then exit 1; fi +[[ "${READINESS_RESULTS[ulticode-app]}" == 'failed http_503/http_503' ]] +check_port() { READINESS_DETAIL=http_200; return 0; } +check_selected_readiness +[[ "${READINESS_RESULTS[ulticode-app]}" == 'ready http_200' ]] +SELECTED_READINESS=('ulticode-app|unknown|0|') +if check_selected_readiness; then exit 1; fi +[[ "${READINESS_RESULTS[ulticode-app]}" == 'failed unknown_probe_kind' ]] +''') + + def test_hung_diagnostic_is_killed_without_changing_failure_exit(self): + # Exercise the production TERM/KILL wrapper with shorter test durations. + wrapper = next(line for line in SOURCE.splitlines() if line.startswith('timeout --kill-after=')) + self.assertIn('--kill-after=2s 25s python3 -u', wrapper) + with tempfile.TemporaryDirectory() as root: + script = Path(root) / 'scripts/dev/readiness-diagnostics.py' + script.parent.mkdir(parents=True) + script.write_text('import signal,time\nsignal.signal(signal.SIGTERM, signal.SIG_IGN)\nwhile True: time.sleep(0.01)\n') + command = wrapper.replace('--kill-after=2s 25s', '--kill-after=0.1s 0.2s') + started = time.monotonic() + result = subprocess.run(['bash', '-c', 'ROOT_DIR="$1"; PM2_APPS=ulticode-app; ' + command + '; echo cleanup-ran; exit 1', 'test', root], capture_output=True, text=True, timeout=3) + self.assertEqual(result.returncode, 1) + self.assertIn('cleanup-ran', result.stdout) + self.assertLess(time.monotonic() - started, 2) + + def test_known_components_only(self): + body = json.dumps({'components': {'db':'DOWN', 'redis':'UP', 'private-key':'private-value', 'storage':'private-value'}}).encode() + status, components = health.classify(503, body, ('db','redis','storage')) + self.assertEqual((status, components), ('http_503', {'db':'down','redis':'up','storage':'unknown'})) + self.assertNotIn('private', json.dumps(components)) + + def test_invalid_oversize_and_redirect(self): + for code, body, expected in [(200,b'bad','invalid_response'),(200,b'[]','invalid_response'),(200,b'x'*(health.LIMIT+1),'oversized_response'),(302,b'private-url','http_other')]: + self.assertEqual(health.classify(code, body, ('db',)), (expected, {'db':'unknown'})) + + def test_probe_has_fixed_destination_limit_and_no_redirect(self): + seen = [] + class Connection: + def __init__(self, *args, **kwargs): seen.append((args, kwargs)) + def request(self, *args): seen.append(args) + def getresponse(self): return self + status = 302 + def read(self, count): seen.append(count); return b'private-url' + def close(self): seen.append('closed') + result = health.probe('ulticode-notification', Connection) + self.assertEqual(result[0], 'http_other') + self.assertEqual(seen, [(('127.0.0.1',9105),{'timeout':5}),('GET','/api/v1/notification/health/ready'),health.LIMIT+1,'closed']) + + def test_exception_text_never_emitted(self): + def fail(*args, **kwargs): raise OSError('https://user:secret@private.example') + with patch.object(health, 'probe', side_effect=lambda app: health.probe_original(app, fail)), contextlib.redirect_stdout(io.StringIO()) as out: + health.main(['ulticode-app,private-app']) + self.assertNotIn('secret', out.getvalue()) + self.assertNotIn('private', out.getvalue()) + self.assertIn('state=unreachable', out.getvalue()) + + def test_parser_last_markers_and_fixed_vocabulary(self): + text = '\n'.join(['ULTICODE_FINAL_READINESS app=ulticode-app state=failed detail=http_503/http_503', 'ULTICODE_FINAL_READINESS app=ulticode-app state=ready detail=http_200', 'ULTICODE_FINAL_READINESS app=private-app state=failed detail=http_503', 'ULTICODE_FINAL_READINESS app=ulticode-app state=failed detail=private-value', 'ULTICODE_FINAL_HEALTH app=ulticode-admin state=http_503', 'ULTICODE_FINAL_COMPONENT app=ulticode-admin component=problemOwnerRpc state=down', 'ULTICODE_FINAL_COMPONENT app=ulticode-admin component=private-key state=up']) + data = report.final_probes(text) + self.assertEqual(data['final_readiness']['ulticode-app']['state'], 'ready') + self.assertEqual(data['final_dependency_probes']['ulticode-admin']['components']['problemOwnerRpc'], 'down') + self.assertFalse(data['final_readiness']['ulticode-search']['observed']) + self.assertNotIn('private', json.dumps(data)) + + def test_search_actual_entrypoint(self): + with tempfile.TemporaryDirectory() as root: + log = Path(root)/'search.log' + log.write_text('Started SearchWorkerApplication in 1 seconds') + self.assertTrue(report.summary([log])['startup_signals']['spring_context_started']) + +health.probe_original = health.probe +if __name__ == '__main__': unittest.main() diff --git a/services/agent/data/repository_corpus_manifest.json b/services/agent/data/repository_corpus_manifest.json index aa638f13b5..24226a94c0 100644 --- a/services/agent/data/repository_corpus_manifest.json +++ b/services/agent/data/repository_corpus_manifest.json @@ -29,8 +29,8 @@ }, { "doc_id": "repository-development", - "version": "sha256-fefbf5a428fcce530e78e28977e2b937a3abaa78db557d476d8b1bfe1ece35d0", - "chunk_id": "repository-development:sha256-fefbf5a428fcce530e78e28977e2b937a3abaa78db557d476d8b1bfe1ece35d0:1", + "version": "sha256-50d4976d6b31a9cdc9484a6cd25b54221a0cee4d340e718bd9f34c832cb72129", + "chunk_id": "repository-development:sha256-50d4976d6b31a9cdc9484a6cd25b54221a0cee4d340e718bd9f34c832cb72129:1", "source_path": "docs/DEVELOPMENT.md", "access_scope": "repository-public", "sample_kind": "real",