From 8ee86f7eefbb6301dabdff8035384e0cf4cce318 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 16 Jul 2026 19:33:16 +0200 Subject: [PATCH 1/2] fix: harden cross-platform release dependencies --- .github/dependabot.yml | 40 + .github/workflows/ci.yml | 169 +- .github/workflows/desktop-release.yml | 11 +- .../workflows/mockup-sprint-orchestration.yml | 24 +- .github/workflows/models-catalog.yml | 7 +- .github/workflows/openrouter-sprint-e2e.yml | 9 +- .github/workflows/playwright.yml | 34 +- .github/workflows/release-checks.yml | 13 +- .github/workflows/release.yml | 37 +- .github/workflows/runtime-image.yml | 20 +- AGENTS.md | 2 +- CLAUDE.md | 2 +- CONTRIBUTING.md | 2 +- GEMINI.md | 2 +- README.md | 2 +- containers/runtime/Dockerfile | 6 +- .../architecture-dashboard-architecture.mdx | 16 +- .../docs/developer-building-from-source.mdx | 2 +- content/docs/user-installation.mdx | 2 +- .../src/v2/components/icons/GitHostIcons.tsx | 26 + .../onboarding/OnboardingExperience.tsx | 2 +- .../onboarding/OnboardingGitStep.tsx | 3 +- .../onboarding/OnboardingIntroductionStep.tsx | 3 +- .../v2/components/sprint/LinkedIssueTag.tsx | 3 +- .../components/sprints/SprintImportMenu.tsx | 3 +- .../sprints/SprintIssueImportModal.tsx | 3 +- .../sprints/importer/IssueImportShell.tsx | 3 +- .../architecture/dashboard-architecture.md | 16 +- .../architecture/managed-container-runtime.md | 2 +- .../architecture-dashboard-architecture.mdx | 16 +- ...architecture-managed-container-runtime.mdx | 2 +- .../docs/developer-building-from-source.mdx | 21 +- docs-web/content/docs/developer-testing.mdx | 2 + docs-web/content/docs/user-installation.mdx | 2 +- docs-web/developer/building-from-source.md | 11 +- docs-web/developer/testing.md | 2 + docs-web/user/installation.md | 2 +- .../architecture/managed-container-runtime.md | 2 +- docs/deployment/electron-desktop.md | 10 +- docs/development/mockup-sprint-pentest.md | 4 +- .../openrouter-sprint-validation.md | 2 +- docs/development/testing-and-quality.md | 6 +- docs/getting-started/quickstart.md | 2 +- docs/operations/runbook.md | 4 +- docs/operations/security-hardening.md | 6 +- electron-builder.config.cjs | 3 + package.json | 75 +- pnpm-lock.yaml | 2762 ++++++----------- pnpm-workspace.yaml | 33 +- scripts/dashboard-i18n-allowlist.json | 24 +- scripts/prepare-electron-runtime-deps.mjs | 1 + scripts/smoke-installed-electron.mjs | 64 +- .../custom-node-project-service.ts | 6 +- tests/backend/ci/workflow-health.test.ts | 73 +- tests/backend/electron-builder-config.test.ts | 25 +- 55 files changed, 1359 insertions(+), 2265 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 dashboard/src/v2/components/icons/GitHostIcons.tsx diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..9509c06679 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,40 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + day: monday + time: "04:00" + timezone: Europe/Berlin + target-branch: dev + open-pull-requests-limit: 10 + groups: + production-dependencies: + dependency-type: production + development-dependencies: + dependency-type: development + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + day: monday + time: "04:30" + timezone: Europe/Berlin + target-branch: dev + open-pull-requests-limit: 10 + groups: + workflow-actions: + patterns: + - "*" + + - package-ecosystem: docker + directory: /containers/runtime + schedule: + interval: weekly + day: monday + time: "05:00" + timezone: Europe/Berlin + target-branch: dev + open-pull-requests-limit: 5 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a1f7a868cc..80b8623981 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,6 @@ permissions: env: NODE_VERSION: "22" - PNPM_VERSION: "11.13.0" PLAYWRIGHT_BROWSERS_PATH: .cache/ms-playwright jobs: @@ -25,7 +24,7 @@ jobs: timeout-minutes: 5 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 @@ -77,34 +76,33 @@ jobs: timeout-minutes: 10 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Restore TypeScript caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .cache/tsc - key: ${{ runner.os }}-node22-pnpm11.13.0-tsc-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'tsconfig.json', 'dashboard/tsconfig.json') }} + key: ${{ runner.os }}-node22-pnpm11-tsc-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'tsconfig.json', 'dashboard/tsconfig.json') }} - name: Run quality guardrails run: pnpm run quality:guardrails @@ -122,36 +120,35 @@ jobs: timeout-minutes: 12 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Restore build caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/tsc .cache/vite - key: ${{ runner.os }}-node22-pnpm11.13.0-build-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json') }} + key: ${{ runner.os }}-node22-pnpm11-build-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json') }} - name: Build server and dashboard run: pnpm run build @@ -164,7 +161,7 @@ jobs: test -d dashboard/dist - name: Upload compiled app artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: codeux-build-linux path: | @@ -182,34 +179,33 @@ jobs: timeout-minutes: 12 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Restore Vitest cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules/.vitest - key: ${{ runner.os }}-node22-pnpm11.13.0-vitest-backend-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vitest.config.ts') }} + key: ${{ runner.os }}-node22-pnpm11-vitest-backend-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vitest.config.ts') }} - name: Run backend tests with coverage run: pnpm run test:backend:coverage @@ -221,34 +217,33 @@ jobs: timeout-minutes: 12 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Restore Vitest cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules/.vitest - key: ${{ runner.os }}-node22-pnpm11.13.0-vitest-dashboard-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vitest.config.ts') }} + key: ${{ runner.os }}-node22-pnpm11-vitest-dashboard-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vitest.config.ts') }} - name: Run dashboard tests run: pnpm run test:dashboard @@ -260,25 +255,24 @@ jobs: timeout-minutes: 8 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts @@ -293,31 +287,30 @@ jobs: timeout-minutes: 8 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Download compiled app artifact - uses: actions/download-artifact@v5 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: codeux-build-linux path: . @@ -358,43 +351,42 @@ jobs: electron_config_cache: ${{ github.workspace }}/.cache/electron-downloads steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache if: runner.os != 'Windows' - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Restore Electron caches if: matrix.runtime == 'electron' - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/electron-runtime .cache/electron-downloads - key: ${{ runner.os }}-node22-pnpm11.13.0-electron-dag-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'electron-builder.config.cjs', 'scripts/e2e/run-mockup-sprint-pentest.mjs', 'scripts/e2e/mockup-sprint-pentest-scenarios.mjs', 'scripts/prepare-electron-runtime-deps.mjs') }} + key: ${{ runner.os }}-node22-pnpm11-electron-dag-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'electron-builder.config.cjs', 'scripts/e2e/run-mockup-sprint-pentest.mjs', 'scripts/e2e/mockup-sprint-pentest-scenarios.mjs', 'scripts/prepare-electron-runtime-deps.mjs') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-electron-dag- + ${{ runner.os }}-node22-pnpm11-electron-dag- - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Download compiled app artifact - uses: actions/download-artifact@v5 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: codeux-build-linux path: . @@ -412,7 +404,7 @@ jobs: - name: Upload orchestration artifacts if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ${{ matrix.artifact }} path: .cache/e2e-mockup-sprint-pentest/ @@ -427,42 +419,41 @@ jobs: timeout-minutes: 10 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Download compiled app artifact - uses: actions/download-artifact@v5 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: codeux-build-linux path: . - name: Cache Playwright browser binaries - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .cache/ms-playwright - key: ${{ runner.os }}-node22-pnpm11.13.0-playwright-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-playwright-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-playwright- + ${{ runner.os }}-node22-pnpm11-playwright- - name: Install Playwright dependencies and Chromium run: | @@ -474,7 +465,7 @@ jobs: - name: Upload Docs smoke artifacts if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: docs-page-smoke path: | @@ -503,43 +494,42 @@ jobs: project: [navigation, settings, projects, tasks, agents, config] steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore node_modules cache if: runner.os != 'Windows' - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Download compiled app artifact - uses: actions/download-artifact@v5 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: codeux-build-linux path: . - name: Cache Playwright browser binaries - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .cache/ms-playwright - key: ${{ runner.os }}-node22-pnpm11.13.0-playwright-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-playwright-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-playwright- + ${{ runner.os }}-node22-pnpm11-playwright- - name: Install Playwright OS dependencies if: runner.os == 'Linux' @@ -553,7 +543,7 @@ jobs: - name: Upload Playwright artifacts if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: playwright-${{ matrix.os.runner }}-${{ matrix.project }} path: | @@ -591,22 +581,21 @@ jobs: electron_config_cache: ${{ github.workspace }}/.cache/electron-downloads steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: ${{ env.PNPM_VERSION }} run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ env.NODE_VERSION }} package-manager-cache: false - name: Restore Electron package caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/electron-runtime @@ -617,9 +606,9 @@ jobs: ~/AppData/Local/electron-builder/Cache ~/Library/Caches/electron ~/Library/Caches/electron-builder - key: ${{ runner.os }}-node22-pnpm11.13.0-release-candidate-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'electron-builder.config.cjs', 'scripts/prepare-electron-runtime-deps.mjs') }} + key: ${{ runner.os }}-node22-pnpm11-release-candidate-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'electron-builder.config.cjs', 'scripts/prepare-electron-runtime-deps.mjs') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-release-candidate- + ${{ runner.os }}-node22-pnpm11-release-candidate- - name: Install Linux packaging dependencies if: runner.os == 'Linux' @@ -631,7 +620,7 @@ jobs: run: pnpm install --frozen-lockfile --ignore-scripts - name: Download compiled app artifact - uses: actions/download-artifact@v5 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: codeux-build-linux path: . @@ -655,7 +644,7 @@ jobs: - name: Upload release candidate artifacts if: ${{ always() && steps.build_desktop_package.outcome == 'success' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ${{ matrix.artifact-name }} path: | diff --git a/.github/workflows/desktop-release.yml b/.github/workflows/desktop-release.yml index a4dd4170f6..8d11dd40a0 100644 --- a/.github/workflows/desktop-release.yml +++ b/.github/workflows/desktop-release.yml @@ -45,25 +45,24 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ inputs.tag || github.ref }} - name: Install pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 cache: pnpm cache-dependency-path: pnpm-lock.yaml - name: Restore desktop build caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/vite @@ -100,7 +99,7 @@ jobs: run: pnpm run electron:smoke-installed - name: Upload workflow artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ${{ matrix.artifact-name }} path: | diff --git a/.github/workflows/mockup-sprint-orchestration.yml b/.github/workflows/mockup-sprint-orchestration.yml index 9dee3fa52e..2409f00958 100644 --- a/.github/workflows/mockup-sprint-orchestration.yml +++ b/.github/workflows/mockup-sprint-orchestration.yml @@ -18,16 +18,15 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 cache: pnpm @@ -63,38 +62,37 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 cache: pnpm cache-dependency-path: pnpm-lock.yaml - name: Restore Electron DAG build caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/vite .cache/vitest .cache/tsc .cache/electron-runtime - key: ${{ runner.os }}-node22-pnpm11.13.0-electron-ci-dag-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json', 'electron-builder.config.cjs', 'scripts/e2e/run-mockup-sprint-pentest.mjs', 'scripts/e2e/mockup-sprint-pentest-scenarios.mjs', 'scripts/prepare-electron-runtime-deps.mjs') }} + key: ${{ runner.os }}-node22-pnpm11-electron-ci-dag-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json', 'electron-builder.config.cjs', 'scripts/e2e/run-mockup-sprint-pentest.mjs', 'scripts/e2e/mockup-sprint-pentest-scenarios.mjs', 'scripts/prepare-electron-runtime-deps.mjs') }} - name: Restore Electron binary cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .cache/electron-downloads - key: ${{ runner.os }}-node22-pnpm11.13.0-electron-binary-${{ hashFiles('pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-electron-binary-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-electron-binary- + ${{ runner.os }}-node22-pnpm11-electron-binary- - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts diff --git a/.github/workflows/models-catalog.yml b/.github/workflows/models-catalog.yml index 00e3d1f043..6a7be12ee8 100644 --- a/.github/workflows/models-catalog.yml +++ b/.github/workflows/models-catalog.yml @@ -17,18 +17,17 @@ jobs: pull-requests: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 package-manager-cache: false diff --git a/.github/workflows/openrouter-sprint-e2e.yml b/.github/workflows/openrouter-sprint-e2e.yml index be78a8da0b..c07ae88dc0 100644 --- a/.github/workflows/openrouter-sprint-e2e.yml +++ b/.github/workflows/openrouter-sprint-e2e.yml @@ -23,16 +23,15 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 cache: pnpm @@ -51,7 +50,7 @@ jobs: - name: Upload OpenRouter sprint artifacts if: ${{ failure() || hashFiles('.cache/e2e-openrouter/**') != '' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: openrouter-sprint-e2e-artifacts path: .cache/e2e-openrouter/ diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 0ad5f46f3b..c934bf2ab8 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -30,26 +30,25 @@ jobs: label: Windows steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 package-manager-cache: false - name: Restore node_modules cache if: runner.os != 'Windows' - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts @@ -58,7 +57,7 @@ jobs: run: pnpm run build - name: Upload compiled app artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: playwright-diagnostic-build-${{ matrix.os.runner }} path: | @@ -86,43 +85,42 @@ jobs: project: [navigation, settings, projects, tasks, agents, config] steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 package-manager-cache: false - name: Restore node_modules cache if: runner.os != 'Windows' - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Download compiled app artifact - uses: actions/download-artifact@v5 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: playwright-diagnostic-build-${{ matrix.os.runner }} path: . - name: Cache Playwright browser binaries - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .cache/ms-playwright - key: ${{ runner.os }}-node22-pnpm11.13.0-playwright-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-playwright-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-playwright- + ${{ runner.os }}-node22-pnpm11-playwright- - name: Install Playwright OS dependencies if: runner.os == 'Linux' @@ -136,7 +134,7 @@ jobs: - name: Upload Playwright artifacts if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: playwright-diagnostic-${{ matrix.os.runner }}-${{ matrix.project }} path: | diff --git a/.github/workflows/release-checks.yml b/.github/workflows/release-checks.yml index ea2916a6ea..5507af8958 100644 --- a/.github/workflows/release-checks.yml +++ b/.github/workflows/release-checks.yml @@ -39,23 +39,22 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 cache: pnpm cache-dependency-path: pnpm-lock.yaml - name: Restore release check caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/vite @@ -68,7 +67,7 @@ jobs: ~/AppData/Local/electron-builder/Cache ~/Library/Caches/electron ~/Library/Caches/electron-builder - key: ${{ runner.os }}-node22-pnpm11.13.0-release-checks-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json', 'electron-builder.config.cjs', 'scripts/prepare-electron-runtime-deps.mjs', 'scripts/verify-release-install.mjs') }} + key: ${{ runner.os }}-node22-pnpm11-release-checks-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json', 'electron-builder.config.cjs', 'scripts/prepare-electron-runtime-deps.mjs', 'scripts/verify-release-install.mjs') }} - name: Install Linux packaging dependencies if: runner.os == 'Linux' @@ -98,7 +97,7 @@ jobs: run: pnpm run electron:smoke-installed - name: Upload release-check artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ${{ matrix.artifact-name }} path: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3cd1308be5..4fc6466658 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,28 +21,27 @@ jobs: timeout-minutes: 8 steps: - name: Checkout release tag - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.release.tag_name }} fetch-depth: 0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 package-manager-cache: false - name: Restore node_modules cache - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: node_modules - key: ${{ runner.os }}-node22-pnpm11.13.0-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} + key: ${{ runner.os }}-node22-pnpm11-nm-${{ hashFiles('package.json', 'pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts @@ -78,25 +77,24 @@ jobs: id-token: write steps: - name: Checkout release tag - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.release.tag_name }} - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 registry-url: "https://registry.npmjs.org" - name: Install npm with Trusted Publishing support run: | - npm install -g npm@11.5.1 + npm install -g npm@12.0.1 npm --version npm root -g node -e "require('$(npm root -g)/npm/node_modules/sigstore'); console.log('npm provenance dependency OK')" @@ -140,24 +138,23 @@ jobs: electron_config_cache: ${{ github.workspace }}/.cache/electron-downloads steps: - name: Checkout release tag - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.event.release.tag_name }} - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.0 run_install: false - name: Setup Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 package-manager-cache: false - name: Restore desktop build caches - uses: actions/cache@v5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | .cache/vite @@ -170,9 +167,9 @@ jobs: ~/AppData/Local/electron-builder/Cache ~/Library/Caches/electron ~/Library/Caches/electron-builder - key: ${{ runner.os }}-node22-pnpm11.13.0-desktop-release-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json', 'electron-builder.config.cjs', 'scripts/prepare-electron-runtime-deps.mjs') }} + key: ${{ runner.os }}-node22-pnpm11-desktop-release-${{ hashFiles('package.json', 'pnpm-lock.yaml', 'vite.config.ts', 'tsconfig.json', 'dashboard/tsconfig.json', 'electron-builder.config.cjs', 'scripts/prepare-electron-runtime-deps.mjs') }} restore-keys: | - ${{ runner.os }}-node22-pnpm11.13.0-desktop-release- + ${{ runner.os }}-node22-pnpm11-desktop-release- - name: Install Linux packaging dependencies if: runner.os == 'Linux' @@ -196,7 +193,7 @@ jobs: run: pnpm run electron:smoke-installed - name: Upload workflow artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ${{ matrix.artifact-name }} path: | @@ -218,7 +215,7 @@ jobs: if-no-files-found: error - name: Upload files to GitHub Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 with: tag_name: ${{ env.RELEASE_TAG }} files: | diff --git a/.github/workflows/runtime-image.yml b/.github/workflows/runtime-image.yml index 3f4bdecbbb..facc594f05 100644 --- a/.github/workflows/runtime-image.yml +++ b/.github/workflows/runtime-image.yml @@ -33,9 +33,9 @@ jobs: matrix: target: [base, browser] steps: - - uses: actions/checkout@v4 - - uses: docker/setup-buildx-action@v3 - - uses: docker/build-push-action@v6 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 + - uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: containers/runtime/Dockerfile @@ -53,7 +53,7 @@ jobs: docker run --rm --network none codeux-runtime-smoke:browser bash -lc 'command -v playwright && command -v playwright-mcp && command -v xvfb-run && command -v xauth && test -d /ms-playwright && test -z "$(find /ms-playwright -mindepth 1 -print -quit)" && test -z "$(find / -type f -name libwidevinecdm.so -print -quit 2>/dev/null)"' fi - name: Scan runtime image - uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0 + uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # 0.36.0 with: image-ref: codeux-runtime-smoke:${{ matrix.target }} format: table @@ -69,17 +69,17 @@ jobs: matrix: target: [base, browser] steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - - uses: docker/setup-buildx-action@v3 - - uses: docker/login-action@v3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 + - uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: sigstore/cosign-installer@v3.10.0 + - uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2 - id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: containers/runtime/Dockerfile diff --git a/AGENTS.md b/AGENTS.md index 50c2cff377..2cac2fee98 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,7 +21,7 @@ - `tests/` and dashboard `__tests__/`: Vitest suites. `.github/workflows/`: CI pipelines. ## Build, Test, and Development Commands -Package manager is **pnpm** (`pnpm@11.13.0`), Node **22.13+**. Use `pnpm`, not `npm`. +Package manager is **pnpm** (`pnpm@11.13.1`), Node **22.13+**. Use `pnpm`, not `npm`. - `pnpm install`: Install dependencies. - `pnpm run dev`: Run server from source (`node --import ./scripts/tsnode-register.mjs src/index.ts`). - `pnpm run build`: server `tsc` + dashboard typecheck + `vite build`. diff --git a/CLAUDE.md b/CLAUDE.md index 803583a9e4..eee7f7a3d1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,7 +19,7 @@ in Docker-backed workspaces; Jules is the one hosted provider. ## Commands -Package manager is **pnpm** (`pnpm@11.13.0`), Node **22.13+**. Use `pnpm`, not `npm`. +Package manager is **pnpm** (`pnpm@11.13.1`), Node **22.13+**. Use `pnpm`, not `npm`. ```bash pnpm run dev # Server from source + dashboard `vite build --watch` side by side (scripts/dev.mjs) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5f327880f1..3c1a8d7d2b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ By participating you agree to abide by our [Code of Conduct](./CODE_OF_CONDUCT.m ## Prerequisites - **Node.js 22.13+** -- **pnpm `11.13.0`** (the repo pins `packageManager`; use `pnpm`, not `npm`) +- **pnpm `11.13.1`** (the repo pins `packageManager`; use `pnpm`, not `npm`) - **Docker** — provider CLIs execute in short-lived Docker workspaces ## Local setup diff --git a/GEMINI.md b/GEMINI.md index eb9a68eb04..0ffd2166ca 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -21,7 +21,7 @@ app**, and an **MCP server** (stdio + optional HTTPS worker gateway). ### Backend (Node.js / ESM) - **Runtime**: Node.js **22.13+** (strict ESM, `"type": "module"`, NodeNext resolution). -- **Package manager**: **pnpm** (`pnpm@11.13.0`) — use `pnpm`, not `npm`. +- **Package manager**: **pnpm** (`pnpm@11.13.1`) — use `pnpm`, not `npm`. - **Language**: TypeScript 5.9 (strict, `ES2022` target). - **Protocol**: Model Context Protocol via `@modelcontextprotocol/sdk`. - **HTTP**: Express 5 for the dashboard/API; Axios for Jules + Jira REST. diff --git a/README.md b/README.md index d3b2b8436b..78c9ade994 100644 --- a/README.md +++ b/README.md @@ -307,7 +307,7 @@ Use source builds when developing Code UX itself or when you need to inspect/mod ### Requirements - Node.js >=22.13. -- pnpm 11.13.0. +- pnpm 11.13.1. - Git 2.30 or newer. - Docker, recommended for virtual worker execution and required for preview containers. - Provider credentials are optional for installation and local startup; configure them later in the dashboard when you are ready to dispatch work. diff --git a/containers/runtime/Dockerfile b/containers/runtime/Dockerfile index 83eb84632e..dff7336edd 100644 --- a/containers/runtime/Dockerfile +++ b/containers/runtime/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1.7 -FROM node:24-trixie-slim AS base +FROM node:24-trixie-slim@sha256:ae91dcc111a68c9d2d81ff2a17bda61be126426176fde6fe7d08ab13b7f50573 AS base LABEL org.opencontainers.image.source="https://github.com/codeux-ai/codeux" LABEL org.opencontainers.image.title="Code UX managed runtime" @@ -20,8 +20,8 @@ RUN apt-get update -qy \ && ln -sf /usr/bin/fdfind /usr/local/bin/fd \ && rm -rf /var/lib/apt/lists/* /tmp/* -ARG NPM_VERSION=12.0.0 -ARG PNPM_VERSION=11.11.0 +ARG NPM_VERSION=12.0.1 +ARG PNPM_VERSION=11.13.1 ARG YARN_VERSION=1.22.22 ARG BUN_VERSION=1.3.14 ARG SERVE_VERSION=14.2.6 diff --git a/content/docs/architecture-dashboard-architecture.mdx b/content/docs/architecture-dashboard-architecture.mdx index 2217365ae3..3a146dcc23 100644 --- a/content/docs/architecture-dashboard-architecture.mdx +++ b/content/docs/architecture-dashboard-architecture.mdx @@ -8,14 +8,14 @@ This page describes its structure, build pipeline, real-time client, and state m | Layer | Technology | | --- | --- | -| UI framework | Preact 10 with `@preact/signals` | -| Routing | TanStack React Router 1.166 | -| Styling | Tailwind CSS v4 (via `@tailwindcss/vite`) | -| Iconography | `lucide-preact` + `lucide-react` | -| Animation | GSAP 3.14 | -| 3D background | Three.js 0.183 | -| Markdown | `marked` 17 | -| Build | Vite 8 with `@preact/preset-vite` | +| UI framework | Preact 10.29 with `@preact/signals` 2.9 | +| Routing | TanStack React Router 1.170 | +| Styling | Tailwind CSS 4.3 (via `@tailwindcss/vite`) | +| Iconography | `lucide-preact` + `lucide-react` 1.24 | +| Animation | GSAP 3.15 | +| 3D background | Three.js 0.185 | +| Markdown | `marked` 18 | +| Build | Vite 8.1 with `@preact/preset-vite` | The bundle is split for caching: a vendor chunk, a per-page chunk (lazy-loaded), and a small entry chunk. diff --git a/content/docs/developer-building-from-source.mdx b/content/docs/developer-building-from-source.mdx index ac519d97dd..cba8c11c11 100644 --- a/content/docs/developer-building-from-source.mdx +++ b/content/docs/developer-building-from-source.mdx @@ -7,7 +7,7 @@ This page covers cloning, building, running, and contributing. ## Prerequisites - **Node.js >=22.13** — The project targets Node 22 in CI and uses ES2022 / NodeNext modules. -- **pnpm 11.13.0** — The package manager declared in `packageManager`. +- **pnpm 11.13.1** — The package manager declared in `packageManager`. - **Git** — only needed for the manual `git clone` step or contributor workflows. - **Docker** — required for normal runtime operation, including containerized helper Git, virtual workers in DOCKER mode, and sprint preview browsers. diff --git a/content/docs/user-installation.mdx b/content/docs/user-installation.mdx index 8e8f6a3875..77ac4f3cbe 100644 --- a/content/docs/user-installation.mdx +++ b/content/docs/user-installation.mdx @@ -101,7 +101,7 @@ Platform notes: ## Option 2 — From source Use a source build to develop Code UX itself or inspect the runtime. Requires Node.js 22.13+ and -pnpm 11.13.0. +pnpm 11.13.1. ```bash git clone https://github.com/codeux-ai/codeux.git diff --git a/dashboard/src/v2/components/icons/GitHostIcons.tsx b/dashboard/src/v2/components/icons/GitHostIcons.tsx new file mode 100644 index 0000000000..64c97c32b8 --- /dev/null +++ b/dashboard/src/v2/components/icons/GitHostIcons.tsx @@ -0,0 +1,26 @@ +import type { FunctionComponent, JSX } from "preact"; + +type GitHostIconProps = JSX.SVGAttributes; + +export const Github: FunctionComponent = (props) => ( + + + +); + +export const Gitlab: FunctionComponent = (props) => ( + + + +); diff --git a/dashboard/src/v2/components/onboarding/OnboardingExperience.tsx b/dashboard/src/v2/components/onboarding/OnboardingExperience.tsx index 8c81e1bb10..6ca63104b4 100644 --- a/dashboard/src/v2/components/onboarding/OnboardingExperience.tsx +++ b/dashboard/src/v2/components/onboarding/OnboardingExperience.tsx @@ -15,7 +15,6 @@ import { BookOpen, FolderOpen, GitBranch, - Github, Info, KeyRound, Layers, @@ -30,6 +29,7 @@ import { Terminal, X, } from "lucide-preact"; +import { Github } from "../icons/GitHostIcons.js"; import { fetchOnboardingReadiness, installOnboardingDependencies } from "../../../lib/api/dashboard-api.js"; import { fetchSystemSettings, saveSystemSettings } from "../../lib/settings-api.js"; import { ONBOARDING_OPEN_EVENT, ONBOARDING_STORAGE_KEY, startDashboardTour } from "../../lib/onboarding-control.js"; diff --git a/dashboard/src/v2/components/onboarding/OnboardingGitStep.tsx b/dashboard/src/v2/components/onboarding/OnboardingGitStep.tsx index a90388b3f6..913abd74d3 100644 --- a/dashboard/src/v2/components/onboarding/OnboardingGitStep.tsx +++ b/dashboard/src/v2/components/onboarding/OnboardingGitStep.tsx @@ -1,6 +1,7 @@ import type { FunctionComponent } from "preact"; -import { GitBranch, Github } from "lucide-preact"; +import { GitBranch } from "lucide-preact"; import type { SystemSettings, ProjectSettings } from "../../../types.js"; +import { Github } from "../icons/GitHostIcons.js"; import { PillChoiceGroup } from "../settings/SettingsFormFields.js"; import { useOnboardingMessages } from "../../i18n/messages/onboarding.js"; diff --git a/dashboard/src/v2/components/onboarding/OnboardingIntroductionStep.tsx b/dashboard/src/v2/components/onboarding/OnboardingIntroductionStep.tsx index 9d2766f2ca..85094a8524 100644 --- a/dashboard/src/v2/components/onboarding/OnboardingIntroductionStep.tsx +++ b/dashboard/src/v2/components/onboarding/OnboardingIntroductionStep.tsx @@ -1,7 +1,8 @@ import type { FunctionComponent } from "preact"; -import { ShieldCheck, Info, Library, Github, Star, BookOpen } from "lucide-preact"; +import { ShieldCheck, Info, Library, Star, BookOpen } from "lucide-preact"; import { getSafeUrl } from "../../lib/safe-url.js"; import { useOnboardingMessages } from "../../i18n/messages/onboarding.js"; +import { Github } from "../icons/GitHostIcons.js"; const CODEUX_REPO_URL = "https://github.com/codeux-ai/codeux"; diff --git a/dashboard/src/v2/components/sprint/LinkedIssueTag.tsx b/dashboard/src/v2/components/sprint/LinkedIssueTag.tsx index 31f8c1d659..6ed0c5d286 100644 --- a/dashboard/src/v2/components/sprint/LinkedIssueTag.tsx +++ b/dashboard/src/v2/components/sprint/LinkedIssueTag.tsx @@ -1,8 +1,6 @@ import type { FunctionComponent } from "preact"; import { ExternalLink, - Github, - Gitlab, Link2, MessageSquare, MessageSquareOff, @@ -12,6 +10,7 @@ import { } from "lucide-preact"; import { getSafeUrl } from "../../lib/safe-url.js"; import type { LinkedIssueProvider } from "../../types.js"; +import { Github, Gitlab } from "../icons/GitHostIcons.js"; import { JiraIcon } from "../icons/JiraIcon.js"; import { useDashboardI18n } from "../../i18n/index.js"; import { sprintsMessages } from "../../i18n/messages/sprints.js"; diff --git a/dashboard/src/v2/components/sprints/SprintImportMenu.tsx b/dashboard/src/v2/components/sprints/SprintImportMenu.tsx index d7dcc8c47c..a22eb361e9 100644 --- a/dashboard/src/v2/components/sprints/SprintImportMenu.tsx +++ b/dashboard/src/v2/components/sprints/SprintImportMenu.tsx @@ -2,7 +2,8 @@ import { h } from "preact"; import { createPortal } from "preact/compat"; import { useCallback, useState, useRef, useEffect, useLayoutEffect } from "preact/hooks"; -import { Boxes, CheckSquare, Download, FileText, Github, Gitlab, Layers, ListTodo, Palette, Shapes } from "lucide-preact"; +import { Boxes, CheckSquare, Download, FileText, Layers, ListTodo, Palette, Shapes } from "lucide-preact"; +import { Github, Gitlab } from "../icons/GitHostIcons.js"; import { JiraIcon } from "../icons/JiraIcon.js"; import { useDashboardI18n } from "../../i18n/index.js"; import { sprintsMessages } from "../../i18n/messages/sprints.js"; diff --git a/dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx b/dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx index b79e085631..6f3597ac7b 100644 --- a/dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx +++ b/dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx @@ -5,14 +5,13 @@ import { CalendarDays, Check, CheckSquare, - Github, - Gitlab, Search, Shield, GitMerge, Loader2, MessageSquare, } from "lucide-preact"; +import { Github, Gitlab } from "../icons/GitHostIcons.js"; import type { Source, SprintImportedTaskInput, diff --git a/dashboard/src/v2/components/sprints/importer/IssueImportShell.tsx b/dashboard/src/v2/components/sprints/importer/IssueImportShell.tsx index 10e34a3e1f..dbf8645ba6 100644 --- a/dashboard/src/v2/components/sprints/importer/IssueImportShell.tsx +++ b/dashboard/src/v2/components/sprints/importer/IssueImportShell.tsx @@ -1,9 +1,10 @@ import type { ComponentChildren, FunctionComponent } from "preact"; -import { AlertTriangle, Boxes, CheckSquare, ChevronDown, FileText, Github, Gitlab, Layers, ListTodo, Palette, Shapes, SlidersHorizontal, X } from "lucide-preact"; +import { AlertTriangle, Boxes, CheckSquare, ChevronDown, FileText, Layers, ListTodo, Palette, Shapes, SlidersHorizontal, X } from "lucide-preact"; import type { IssueImportErrorCopy, IssueImportProviderMetadata, } from "../../../lib/issue-import-view-models.js"; +import { Github, Gitlab } from "../../icons/GitHostIcons.js"; import { JiraIcon } from "../../icons/JiraIcon.js"; import { useDashboardI18n } from "../../../i18n/index.js"; import { sprintsMessages } from "../../../i18n/messages/sprints.js"; diff --git a/docs-web/architecture/dashboard-architecture.md b/docs-web/architecture/dashboard-architecture.md index 8515da4035..af7265bd08 100644 --- a/docs-web/architecture/dashboard-architecture.md +++ b/docs-web/architecture/dashboard-architecture.md @@ -8,14 +8,14 @@ This page describes its structure, build pipeline, real-time client, and state m | Layer | Technology | | --- | --- | -| UI framework | Preact 10 with `@preact/signals` | -| Routing | TanStack React Router 1.166 | -| Styling | Tailwind CSS v4 (via `@tailwindcss/vite`) | -| Iconography | `lucide-preact` + `lucide-react` | -| Animation | GSAP 3.14 | -| 3D background | Three.js 0.183 | -| Markdown | `marked` 17 | -| Build | Vite 8 with `@preact/preset-vite` | +| UI framework | Preact 10.29 with `@preact/signals` 2.9 | +| Routing | TanStack React Router 1.170 | +| Styling | Tailwind CSS 4.3 (via `@tailwindcss/vite`) | +| Iconography | `lucide-preact` + `lucide-react` 1.24 | +| Animation | GSAP 3.15 | +| 3D background | Three.js 0.185 | +| Markdown | `marked` 18 | +| Build | Vite 8.1 with `@preact/preset-vite` | The bundle is split for caching: a vendor chunk, a per-page chunk (lazy-loaded), and a small entry chunk. diff --git a/docs-web/architecture/managed-container-runtime.md b/docs-web/architecture/managed-container-runtime.md index f1e101e4ba..305cb82a80 100644 --- a/docs-web/architecture/managed-container-runtime.md +++ b/docs-web/architecture/managed-container-runtime.md @@ -6,7 +6,7 @@ The managed container runtime removes first-invocation Docker builds while keepi At startup Code UX checks the stable `base` and `browser` channel tags when the persisted update watermark is older than six hours, resolves immutable repository digests, smoke-tests Node 24, and activates verified digests for future containers. Restarts inside the freshness window issue no registry pull. Checks run in the background and fail open to the last verified digest. -The `base` image is a multi-architecture `node:24-trixie-slim` development environment. The `browser` image adds pinned Playwright, Playwright MCP, and Linux browser dependencies, but contains no browser binary. CI rejects embedded browser/Widevine artifacts, smoke-tests both targets, publishes SBOM/provenance attestations, and signs their digests. +The `base` image is a multi-architecture `node:24-trixie-slim` development environment pinned by manifest digest. Its package managers and preview server are versioned explicitly, including npm 12.0.1 and pnpm 11.13.1. The `browser` image adds pinned Playwright, Playwright MCP, and Linux browser dependencies, but contains no browser binary. CI rejects embedded browser/Widevine artifacts, smoke-tests both targets, publishes SBOM/provenance attestations, and signs their digests. When browser support is enabled, Code UX downloads the Playwright-matched browser directly on the user's Docker host into a versioned volume, verifies it offline, and mounts it read-only at `/ms-playwright`. The complete browser supports headed and headless launches; Code UX does not force either mode. Startup and settings saves preload this volume. Provider invocations use `browser` plus the volume; Login, previews, and custom dashboard validation use the appropriate base resolver. The default path contains no local `docker build`. diff --git a/docs-web/content/docs/architecture-dashboard-architecture.mdx b/docs-web/content/docs/architecture-dashboard-architecture.mdx index 5104f947b9..a2237b9c79 100644 --- a/docs-web/content/docs/architecture-dashboard-architecture.mdx +++ b/docs-web/content/docs/architecture-dashboard-architecture.mdx @@ -8,14 +8,14 @@ This page describes its structure, build pipeline, real-time client, and state m | Layer | Technology | | --- | --- | -| UI framework | Preact 10 with `@preact/signals` | -| Routing | TanStack React Router 1.166 | -| Styling | Tailwind CSS v4 (via `@tailwindcss/vite`) | -| Iconography | `lucide-preact` + `lucide-react` | -| Animation | GSAP 3.14 | -| 3D background | Three.js 0.183 | -| Markdown | `marked` 17 | -| Build | Vite 8 with `@preact/preset-vite` | +| UI framework | Preact 10.29 with `@preact/signals` 2.9 | +| Routing | TanStack React Router 1.170 | +| Styling | Tailwind CSS 4.3 (via `@tailwindcss/vite`) | +| Iconography | `lucide-preact` + `lucide-react` 1.24 | +| Animation | GSAP 3.15 | +| 3D background | Three.js 0.185 | +| Markdown | `marked` 18 | +| Build | Vite 8.1 with `@preact/preset-vite` | The bundle is split for caching: a vendor chunk, a per-page chunk (lazy-loaded), and a small entry chunk. diff --git a/docs-web/content/docs/architecture-managed-container-runtime.mdx b/docs-web/content/docs/architecture-managed-container-runtime.mdx index f1e101e4ba..305cb82a80 100644 --- a/docs-web/content/docs/architecture-managed-container-runtime.mdx +++ b/docs-web/content/docs/architecture-managed-container-runtime.mdx @@ -6,7 +6,7 @@ The managed container runtime removes first-invocation Docker builds while keepi At startup Code UX checks the stable `base` and `browser` channel tags when the persisted update watermark is older than six hours, resolves immutable repository digests, smoke-tests Node 24, and activates verified digests for future containers. Restarts inside the freshness window issue no registry pull. Checks run in the background and fail open to the last verified digest. -The `base` image is a multi-architecture `node:24-trixie-slim` development environment. The `browser` image adds pinned Playwright, Playwright MCP, and Linux browser dependencies, but contains no browser binary. CI rejects embedded browser/Widevine artifacts, smoke-tests both targets, publishes SBOM/provenance attestations, and signs their digests. +The `base` image is a multi-architecture `node:24-trixie-slim` development environment pinned by manifest digest. Its package managers and preview server are versioned explicitly, including npm 12.0.1 and pnpm 11.13.1. The `browser` image adds pinned Playwright, Playwright MCP, and Linux browser dependencies, but contains no browser binary. CI rejects embedded browser/Widevine artifacts, smoke-tests both targets, publishes SBOM/provenance attestations, and signs their digests. When browser support is enabled, Code UX downloads the Playwright-matched browser directly on the user's Docker host into a versioned volume, verifies it offline, and mounts it read-only at `/ms-playwright`. The complete browser supports headed and headless launches; Code UX does not force either mode. Startup and settings saves preload this volume. Provider invocations use `browser` plus the volume; Login, previews, and custom dashboard validation use the appropriate base resolver. The default path contains no local `docker build`. diff --git a/docs-web/content/docs/developer-building-from-source.mdx b/docs-web/content/docs/developer-building-from-source.mdx index ab761f1d56..9350c60482 100644 --- a/docs-web/content/docs/developer-building-from-source.mdx +++ b/docs-web/content/docs/developer-building-from-source.mdx @@ -7,7 +7,7 @@ This page covers cloning, building, running, and contributing. ## Prerequisites - **Node.js >=22.13** — The project targets Node 22 in CI and uses ES2022 / NodeNext modules. -- **pnpm 11.13.0** — The package manager declared in `packageManager`. +- **pnpm 11.13.1** — The package manager declared in `packageManager`. - **Git** — only needed for the manual `git clone` step or contributor workflows. - **Docker** — required for normal runtime operation, including containerized helper Git, virtual workers in DOCKER mode, and sprint preview browsers. @@ -166,19 +166,22 @@ pnpm run dev:server-only # boot just the server from source Electron and npm package builds must include the `docs-web` runtime catalog. The dashboard Docs page fetches its collection and markdown through `/api/docs-web`, so installed desktop builds and npm-installed CLI/server runs need the same `docs-web` directory beside the compiled runtime root. -Electron runtime dependency preparation runs a production-only pnpm 11 install with `--config.node-linker=hoisted` passed on the command line. A nested runtime `.npmrc` is not enough once pnpm discovers the enclosing workspace. Preparation rejects symbolic links, missing direct production packages, and failed MCP SDK/`zod` imports so Electron Builder cannot silently copy a broken peer-dependency layout. The workspace `allowBuilds` policy approves only `onnxruntime-node`; preparation sets `ONNXRUNTIME_NODE_INSTALL=skip` because the CPU bindings used by Code UX are bundled and the upstream Linux default fetches optional CUDA/TensorRT binaries from NuGet. This keeps desktop packaging deterministic without suppressing the dependency postinstall or pnpm's build-policy check. Keep that allowlist narrow and review any addition as release-executed code. +Electron runtime dependency preparation runs a production-only pnpm 11 install with `--config.node-linker=hoisted` passed on the command line. A nested runtime `.npmrc` is not enough once pnpm discovers the enclosing workspace. Preparation rejects symbolic links, missing direct production packages, and failed MCP SDK, ONNX Runtime, or `zod` imports so Electron Builder cannot silently copy a broken peer-dependency layout. The workspace `allowBuilds` policy approves only `onnxruntime-node` and explicitly denies the unused Squirrel `electron-winstaller` helper pulled into the NSIS toolchain; preparation sets `ONNXRUNTIME_NODE_INSTALL=skip` because the CPU bindings used by Code UX are bundled and the upstream Linux default fetches optional CUDA/TensorRT binaries from NuGet. This keeps desktop packaging deterministic without suppressing the dependency postinstall or pnpm's build-policy check. Keep that allowlist narrow and review any addition as release-executed code. The installed-Electron smoke uses each platform's native package and waits until the packaged backend and renderer are ready and the readiness marker is durably written. Linux and Windows then require the isolated app probe to exit with code zero. On Windows the harness passes the NSIS silent-install arguments verbatim so the required final `/D=` destination remains unquoted even -when that destination contains spaces. The exact transient `0xC0000005` termination sometimes seen -while a GitHub runner inspects a newly produced unsigned installer receives bounded retries after -1.5, 5, and 15 seconds with fresh destinations; other failures are not retried. On macOS the harness -accepts the DMG's embedded MIT license through `hdiutil` stdin, validates readiness, then owns probe -teardown with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can defer both -Electron and Node exit paths. Production Electron shutdowns still drain the embedded runtime -normally. +when that destination contains spaces, and it explicitly selects current-user installation. The +interactive beta notice aborts before initializing `nsDialogs` during silent installs while +remaining visible in the normal installer. Electron Builder 26.15.6 supplies pnpm 11 dependency +collection fixes, and `toolsets.nsis: "1.2.1"` selects NSIS 3.12 instead of the legacy assisted +per-user installer path that could crash with `0xC0000005` on `windows-latest`. The smoke requires +the first install attempt to succeed; every non-zero status fails immediately. On macOS the +harness accepts the DMG's embedded MIT license through `hdiutil` stdin, validates readiness, then +owns probe teardown with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can +defer both Electron and Node exit paths. Production Electron shutdowns still drain the embedded +runtime normally. They must also include `assets/models-dev/catalog.json`. The automatic token-pricing path reads this snapshot beside the compiled runtime; without it, known models can appear unpriced only in the desktop build. Electron packaging tests pin both runtime assets and a representative GPT-5.5 catalogue rate. diff --git a/docs-web/content/docs/developer-testing.mdx b/docs-web/content/docs/developer-testing.mdx index 5a30620d06..17c511bea4 100644 --- a/docs-web/content/docs/developer-testing.mdx +++ b/docs-web/content/docs/developer-testing.mdx @@ -133,6 +133,8 @@ The main branch ruleset still includes historical context names from older CI nu `Playwright Diagnostics`, `Release Candidate Diagnostics`, and `Mockup Sprint Diagnostics` are manual-only rerun workflows. Desktop diagnostics invoke Electron Builder directly with an explicit platform target and `--publish never`, preventing CI auto-detection from turning an artifact-only validation into a publish attempt. A PR cannot be merged with red CI. +Workflow actions are pinned to immutable reviewed commit SHAs, with release versions kept in comments for auditability. pnpm enforces a strict 24-hour package-age gate; deliberately selected current releases use exact reviewed exclusions, and CI rejects other immature resolutions. Dependabot checks npm, GitHub Actions, and the managed runtime Docker base weekly against `dev`. TypeScript remains on the newest source-loader-compatible stable line (5.9.3) until stable `ts-node` supports TypeScript 7, while Node type declarations stay aligned with the supported Node 22 runtime. + ## Smoke test After build, sanity-check the binary: diff --git a/docs-web/content/docs/user-installation.mdx b/docs-web/content/docs/user-installation.mdx index cea3db3745..d30e3771ef 100644 --- a/docs-web/content/docs/user-installation.mdx +++ b/docs-web/content/docs/user-installation.mdx @@ -101,7 +101,7 @@ Platform notes: ## Option 2 — From source Use a source build to develop Code UX itself or inspect the runtime. Requires Node.js 22.13+ and -pnpm 11.13.0. +pnpm 11.13.1. ```bash git clone https://github.com/codeux-ai/codeux.git diff --git a/docs-web/developer/building-from-source.md b/docs-web/developer/building-from-source.md index 391cb0106f..c6e1a00a78 100644 --- a/docs-web/developer/building-from-source.md +++ b/docs-web/developer/building-from-source.md @@ -7,7 +7,7 @@ This page covers cloning, building, running, and contributing. ## Prerequisites - **Node.js >=22.13** — The project targets Node 22 in CI and uses ES2022 / NodeNext modules. -- **pnpm 11.13.0** — The package manager declared in `packageManager`. +- **pnpm 11.13.1** — The package manager declared in `packageManager`. - **Git** — only needed for the manual `git clone` step or contributor workflows. - **Docker** — required for normal runtime operation, including containerized helper Git, virtual workers in DOCKER mode, and sprint preview browsers. @@ -166,7 +166,7 @@ pnpm run dev:server-only # boot just the server from source Electron and npm package builds must include the `docs-web` runtime catalog. The dashboard Docs page fetches its collection and markdown through `/api/docs-web`, so installed desktop builds and npm-installed CLI/server runs need the same `docs-web` directory beside the compiled runtime root. -Electron runtime dependency preparation runs a production-only pnpm 11 install with `--config.node-linker=hoisted` passed on the command line. A nested runtime `.npmrc` is not enough once pnpm discovers the enclosing workspace. Preparation rejects symbolic links, missing direct production packages, and failed MCP SDK/`zod` imports so Electron Builder cannot silently copy a broken peer-dependency layout. The workspace `allowBuilds` policy approves only `onnxruntime-node`; preparation sets `ONNXRUNTIME_NODE_INSTALL=skip` because the CPU bindings used by Code UX are bundled and the upstream Linux default fetches optional CUDA/TensorRT binaries from NuGet. This keeps desktop packaging deterministic without suppressing the dependency postinstall or pnpm's build-policy check. Keep that allowlist narrow and review any addition as release-executed code. +Electron runtime dependency preparation runs a production-only pnpm 11 install with `--config.node-linker=hoisted` passed on the command line. A nested runtime `.npmrc` is not enough once pnpm discovers the enclosing workspace. Preparation rejects symbolic links, missing direct production packages, and failed MCP SDK, ONNX Runtime, or `zod` imports so Electron Builder cannot silently copy a broken peer-dependency layout. The workspace `allowBuilds` policy approves only `onnxruntime-node` and explicitly denies the unused Squirrel `electron-winstaller` helper pulled into the NSIS toolchain; preparation sets `ONNXRUNTIME_NODE_INSTALL=skip` because the CPU bindings used by Code UX are bundled and the upstream Linux default fetches optional CUDA/TensorRT binaries from NuGet. This keeps desktop packaging deterministic without suppressing the dependency postinstall or pnpm's build-policy check. Keep that allowlist narrow and review any addition as release-executed code. The installed-Electron smoke uses each platform's native package and waits until the packaged backend and renderer are ready and the readiness marker is durably written. Linux and Windows then @@ -174,9 +174,10 @@ require the isolated app probe to exit with code zero. On Windows the harness pa silent-install arguments verbatim so the required final `/D=` destination remains unquoted even when that destination contains spaces, and it explicitly selects current-user installation. The interactive beta notice aborts before initializing `nsDialogs` during silent installs while -remaining visible in the normal installer. The exact transient `0xC0000005` termination sometimes -seen while a GitHub runner inspects a newly produced unsigned installer receives bounded retries -after 1.5, 5, and 15 seconds with fresh destinations; other failures are not retried. On macOS the +remaining visible in the normal installer. Electron Builder 26.15.6 supplies pnpm 11 dependency +collection fixes, and `toolsets.nsis: "1.2.1"` selects NSIS 3.12 instead of the legacy assisted +per-user installer path that could crash with `0xC0000005` on `windows-latest`. The smoke requires +the first install attempt to succeed; every non-zero status fails immediately. On macOS the harness accepts the DMG's embedded MIT license through `hdiutil` stdin, validates readiness, then owns probe teardown with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can defer both Electron and Node exit paths. Production Electron shutdowns still drain the embedded diff --git a/docs-web/developer/testing.md b/docs-web/developer/testing.md index 5a30620d06..17c511bea4 100644 --- a/docs-web/developer/testing.md +++ b/docs-web/developer/testing.md @@ -133,6 +133,8 @@ The main branch ruleset still includes historical context names from older CI nu `Playwright Diagnostics`, `Release Candidate Diagnostics`, and `Mockup Sprint Diagnostics` are manual-only rerun workflows. Desktop diagnostics invoke Electron Builder directly with an explicit platform target and `--publish never`, preventing CI auto-detection from turning an artifact-only validation into a publish attempt. A PR cannot be merged with red CI. +Workflow actions are pinned to immutable reviewed commit SHAs, with release versions kept in comments for auditability. pnpm enforces a strict 24-hour package-age gate; deliberately selected current releases use exact reviewed exclusions, and CI rejects other immature resolutions. Dependabot checks npm, GitHub Actions, and the managed runtime Docker base weekly against `dev`. TypeScript remains on the newest source-loader-compatible stable line (5.9.3) until stable `ts-node` supports TypeScript 7, while Node type declarations stay aligned with the supported Node 22 runtime. + ## Smoke test After build, sanity-check the binary: diff --git a/docs-web/user/installation.md b/docs-web/user/installation.md index 26964c6905..8338cb1898 100644 --- a/docs-web/user/installation.md +++ b/docs-web/user/installation.md @@ -101,7 +101,7 @@ Platform notes: ## Option 2 — From source Use a source build to develop Code UX itself or inspect the runtime. Requires Node.js 22.13+ and -pnpm 11.13.0. +pnpm 11.13.1. ```bash git clone https://github.com/codeux-ai/codeux.git diff --git a/docs/architecture/managed-container-runtime.md b/docs/architecture/managed-container-runtime.md index 41a2d82e41..b9c684e153 100644 --- a/docs/architecture/managed-container-runtime.md +++ b/docs/architecture/managed-container-runtime.md @@ -6,7 +6,7 @@ Code UX uses a shared, auto-updating Linux runtime for Docker-backed provider in The runtime is published from `containers/runtime/Dockerfile` to `ghcr.io/codeux-ai/codeux-runtime` for `linux/amd64` and `linux/arm64`. -- `1-base` is based on `node:24-trixie-slim` and includes the shared development toolchain: JavaScript package managers, Python, Git/GitHub CLI, compilers, keyring support, preview utilities, and common Unix diagnostics. +- `1-base` is based on the current multi-architecture `node:24-trixie-slim` manifest pinned by digest and includes the shared development toolchain: JavaScript package managers, Python, Git/GitHub CLI, compilers, keyring support, preview utilities, and common Unix diagnostics. Runtime tool versions are explicit (`npm` 12.0.1, pnpm 11.13.1, Yarn 1.22.22, Bun 1.3.14, and `serve` 14.2.6) so rebuilding a channel does not silently select a different package-manager binary. - `1-browser` extends the base target with pinned open-source Playwright, Playwright MCP, and Linux browser dependencies. It intentionally contains no browser binary. The publish workflow builds both targets, smoke-tests their tool inventory, emits SBOM and provenance attestations, and signs each published digest with Sigstore. Channel tags are discovery pointers only. `ManagedRuntimeService` pulls the channel, resolves the local `RepoDigest`, verifies Node 24 in a network-isolated smoke container, and stores only immutable digests as the active runtime. diff --git a/docs/deployment/electron-desktop.md b/docs/deployment/electron-desktop.md index cf57ffea3b..03b174bfce 100644 --- a/docs/deployment/electron-desktop.md +++ b/docs/deployment/electron-desktop.md @@ -67,14 +67,16 @@ macOS DMG builds include the MIT license resource through `build/license_en.txt` - `pnpm run electron:dist:win`: build Windows targets. - `pnpm run electron:benchmark:runtime`: launch Electron with an isolated temporary user profile, navigate dashboard routes, probe backend endpoints, and write route/API/renderer/runtime metrics under `.cache/electron-runtime-benchmark/`. - `pnpm run electron:benchmark:win`: build Windows installers with `normal` and `store` compression and write timing/size data to `release/electron-benchmark/summary.json`. -- `pnpm run electron:smoke-installed`: select the native package in `release/electron/` whose artifact name matches the current `package.json` version, install it, start that installed app with an isolated profile, and wait until its backend and renderer are ready. Linux and Windows require the isolated app probe to exit with code zero. macOS validates the durably written readiness marker, then the parent smoke harness terminates only that validated probe with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can defer both `app.exit()` and `process.exit()` after readiness. Linux requires passwordless `sudo` and `xvfb-run`, as provided by the release runners. Windows explicitly selects the current-user NSIS mode and passes the silent install arguments verbatim because NSIS requires its final `/D=` destination segment to remain unquoted even when the isolated path contains spaces. The custom beta notice is skipped before `nsDialogs` initialization during silent installs; it remains visible for normal interactive installation. GitHub Windows runners can transiently terminate a newly produced unsigned NSIS installer with `0xC0000005` while host security inspection settles, so only that exact status receives bounded retries after 1.5, 5, and 15 seconds, each with a fresh destination; every other installer failure remains immediate. macOS supplies affirmative input to `hdiutil` so the CI-owned smoke can mount a DMG containing the embedded MIT license without an interactive terminal. +- `pnpm run electron:smoke-installed`: select the native package in `release/electron/` whose artifact name matches the current `package.json` version, install it, start that installed app with an isolated profile, and wait until its backend and renderer are ready. Linux and Windows require the isolated app probe to exit with code zero. macOS validates the durably written readiness marker, then the parent smoke harness terminates only that validated probe with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can defer both `app.exit()` and `process.exit()` after readiness. Linux requires passwordless `sudo` and `xvfb-run`, as provided by the release runners. Windows explicitly selects the current-user NSIS mode and passes the silent install arguments verbatim because NSIS requires its final `/D=` destination segment to remain unquoted even when the isolated path contains spaces. The custom beta notice is skipped before `nsDialogs` initialization during silent installs; it remains visible for normal interactive installation. The Windows release toolchain uses Electron Builder 26.15.6 with its pnpm 11 dependency-collection repairs and opts into the NSIS 3.12 toolset (`toolsets.nsis: "1.2.1"`), avoiding the legacy `System.dll` per-user installer crash that surfaced as `0xC0000005` on current `windows-latest` runners. The smoke test performs one install attempt and fails immediately on any non-zero status, so retries cannot mask a broken candidate. macOS supplies affirmative input to `hdiutil` so the CI-owned smoke can mount a DMG containing the embedded MIT license without an interactive terminal. - `pnpm run electron:install-deps`: rebuild native app dependencies for Electron. The release output is written to `release/electron/`. -Electron package builds run `pnpm run electron:prepare-deps` before Electron Builder. That script creates a production-only, hoisted runtime dependency tree in `.cache/electron-runtime/node_modules`, prunes non-runtime package files, generates deterministic PNG/ICO/BMP desktop artwork, and Electron Builder copies it to `resources/node_modules` so ASAR-packaged builds can resolve pnpm transitive dependencies at runtime. The pnpm invocation passes `--config.node-linker=hoisted` directly; a nested runtime `.npmrc` is not sufficient when pnpm 11 discovers the enclosing workspace. Preparation rejects symbolic-link layouts, missing direct production packages, and failed MCP SDK, `dotenv`, or `zod` imports before accepting or fingerprinting the tree. `zod` remains a direct production dependency because the MCP SDK consumes it as a runtime peer as well as a transitive dependency. +Electron package builds run `pnpm run electron:prepare-deps` before Electron Builder. That script creates a production-only, hoisted runtime dependency tree in `.cache/electron-runtime/node_modules`, prunes non-runtime package files, generates deterministic PNG/ICO/BMP desktop artwork, and Electron Builder copies it to `resources/node_modules` so ASAR-packaged builds can resolve pnpm transitive dependencies at runtime. The pnpm invocation passes `--config.node-linker=hoisted` directly; a nested runtime `.npmrc` is not sufficient when pnpm 11 discovers the enclosing workspace. Preparation rejects symbolic-link layouts, missing direct production packages, and failed MCP SDK, `dotenv`, ONNX Runtime, or `zod` imports before accepting or fingerprinting the tree. `zod` remains a direct production dependency because the MCP SDK consumes it as a runtime peer as well as a transitive dependency. -pnpm 11 treats ignored dependency build scripts as an error. The workspace `allowBuilds` policy therefore approves only `onnxruntime-node`. Electron runtime preparation explicitly sets `ONNXRUNTIME_NODE_INSTALL=skip`: the CPU native bindings used by Code UX are already bundled, while the upstream default on Linux downloads optional CUDA/TensorRT binaries from NuGet. This keeps desktop packaging deterministic and offline from that optional feed without suppressing the dependency postinstall or its pnpm policy check. Keep the allowlist narrow; adding another package requires confirming that its build script is necessary for the packaged runtime and safe on every release runner. +pnpm 11 treats undeclared dependency build scripts as an error. The workspace `allowBuilds` policy therefore approves only `onnxruntime-node` and explicitly denies `electron-winstaller`, an unused Squirrel helper pulled into the Electron Builder toolchain whose install script is unnecessary for the NSIS target. Electron runtime preparation explicitly sets `ONNXRUNTIME_NODE_INSTALL=skip`: the CPU native bindings used by Code UX are already bundled, while the upstream default on Linux downloads optional CUDA/TensorRT binaries from NuGet. This keeps desktop packaging deterministic and offline from that optional feed without suppressing the dependency postinstall or its pnpm policy check. Keep the allowlist narrow; adding another package requires confirming that its build script is necessary for the packaged runtime and safe on every release runner. + +The root toolchain declares `tslib` directly because Electron Builder's certificate/signing modules load it during package startup on every operating system. Keeping that build-time dependency explicit prevents pnpm's strict isolated layout from depending on transitive hoisting before the native package matrix even begins. Electron Builder must include the `docs-web/**` runtime catalog in the app contents because the dashboard Docs page reads its collection and markdown through `/api/docs-web`. Installed desktop builds, npm-installed CLI/server runs, and source checkouts all rely on the same directory living beside the compiled runtime root, where `DocsWebCatalogService` resolves it. Keep `docs-web` in both the Electron Builder `files` list and the npm package `files` list whenever packaging metadata changes. @@ -129,7 +131,7 @@ Use `.github/workflows/release.yml` for published desktop releases. It is the la The no-secret release-candidate package lane is part of `.github/workflows/ci.yml`, named `Code UX CI Pipeline`. It runs for `main` validation and manual dispatches after package smoke, keeping the full desktop package proof out of the routine `dev` lane. -The `10 Release Candidate / desktop package` matrix starts as soon as the package smoke job passes, so desktop packaging can run beside the E2E and orchestration matrices instead of waiting for them to finish. It downloads the shared `codeux-build-linux` artifact, installs the cached Electron binary, rebuilds Electron native dependencies, prepares runtime assets, and runs Electron Builder directly with `--linux`, `--mac`, or `--win` plus `--publish never`. After compilation, every native runner installs its candidate—the Linux `.deb`, Windows NSIS `.exe`, or macOS app copied from the `.dmg`—and starts that installed copy with an isolated home and dashboard port. The Windows smoke selects current-user installation, preserves NSIS's required unquoted final `/D=` destination segment, and skips the interactive beta page before its dialog plugin is initialized. It treats only the known transient `0xC0000005` runner termination as retryable, using three progressively longer waits and a fresh destination each time so a short host-security scan cannot make an otherwise valid candidate flaky. The macOS smoke accepts the DMG's embedded MIT license through `hdiutil` stdin before mounting. Success requires the packaged backend to start, the dashboard renderer to finish loading, and an atomic readiness marker to be written. Linux and Windows then require a zero-code probe exit; on macOS the parent harness owns teardown after validation, using `SIGTERM` with a short `SIGKILL` fallback so upstream AppKit exit deferral cannot turn a healthy installed app into a false failure. Built native artifacts are uploaded whenever packaging succeeded, even if the installed-app smoke fails, preserving evidence for release debugging. Production shutdowns remain unchanged and still drain the embedded server. The package smoke job that precedes it runs `node scripts/verify-release-install.mjs` with `CODE_UX_SKIP_RELEASE_INSTALL_BUILD=1`, so the npm tarball install check uses the same compiled artifact instead of rebuilding. +The `10 Release Candidate / desktop package` matrix starts as soon as the package smoke job passes, so desktop packaging can run beside the E2E and orchestration matrices instead of waiting for them to finish. It downloads the shared `codeux-build-linux` artifact, installs the cached Electron binary, rebuilds Electron native dependencies, prepares runtime assets, and runs Electron Builder directly with `--linux`, `--mac`, or `--win` plus `--publish never`. After compilation, every native runner installs its candidate—the Linux `.deb`, Windows NSIS `.exe`, or macOS app copied from the `.dmg`—and starts that installed copy with an isolated home and dashboard port. The Windows smoke selects current-user installation, preserves NSIS's required unquoted final `/D=` destination segment, and skips the interactive beta page before its dialog plugin is initialized. Electron Builder 26.15.6 and NSIS 3.12 remove the legacy assisted per-user installer crash; the lane therefore requires the first installation attempt to succeed and reports the exact hexadecimal failure status otherwise. The macOS smoke accepts the DMG's embedded MIT license through `hdiutil` stdin before mounting. Success requires the packaged backend to start, the dashboard renderer to finish loading, and an atomic readiness marker to be written. Linux and Windows then require a zero-code probe exit; on macOS the parent harness owns teardown after validation, using `SIGTERM` with a short `SIGKILL` fallback so upstream AppKit exit deferral cannot turn a healthy installed app into a false failure. Built native artifacts are uploaded whenever packaging succeeded, even if the installed-app smoke fails, preserving evidence for release debugging. Production shutdowns remain unchanged and still drain the embedded server. The package smoke job that precedes it runs `node scripts/verify-release-install.mjs` with `CODE_UX_SKIP_RELEASE_INSTALL_BUILD=1`, so the npm tarball install check uses the same compiled artifact instead of rebuilding. Release-candidate packaging sets `CSC_IDENTITY_AUTO_DISCOVERY=false` for unsigned Electron packaging and passes `--publish never` to Electron Builder. It does not require provider API keys, npm publishing credentials, Docker credentials, GitHub Release events, or real project state. When Electron output exists, the workflow uploads files from `release/electron/` as workflow artifacts only; it does not publish to npm or attach files to a GitHub Release. diff --git a/docs/development/mockup-sprint-pentest.md b/docs/development/mockup-sprint-pentest.md index 2722e82db6..6c525e6359 100644 --- a/docs/development/mockup-sprint-pentest.md +++ b/docs/development/mockup-sprint-pentest.md @@ -10,7 +10,7 @@ The lane must route task coding, CI repair, merge-conflict repair, and QA review Run the pentest from the repository root with: -- Node 22 and pnpm 11.13.0. +- Node 22 and pnpm 11.13.1. - Installed workspace dependencies. - Docker available on `PATH`; the runner checks Docker before starting the sprint lane. - A compiled runtime in `dist/`. @@ -161,7 +161,7 @@ Unless `--keep-artifacts` is set, the runner removes `home/tmp` after cleanup wh The automatic CI lane is `.github/workflows/ci.yml`, named `Code UX CI Pipeline`. -Its `08 Orchestration / DAG` job is one shared OS matrix. The Linux entry runs on `ubuntu-latest`, installs dependencies with pnpm 11.13.0 on Node 22, downloads the shared compiled build artifact, and runs the Docker-backed QA DAG lane: +Its `08 Orchestration / DAG` job is one shared OS matrix. The Linux entry runs on `ubuntu-latest`, installs dependencies with pnpm 11.13.1 on Node 22, downloads the shared compiled build artifact, and runs the Docker-backed QA DAG lane: ```bash pnpm run test:orchestration:ci-dag:run diff --git a/docs/development/openrouter-sprint-validation.md b/docs/development/openrouter-sprint-validation.md index 10e094c8e2..55501a30a1 100644 --- a/docs/development/openrouter-sprint-validation.md +++ b/docs/development/openrouter-sprint-validation.md @@ -16,7 +16,7 @@ The runner is secret-gated. If `OPENROUTER_API_KEY` is not set, it prints a skip ## GitHub Actions -`.github/workflows/openrouter-sprint-e2e.yml` runs this validation on pushes to `main` and through manual dispatch. The workflow installs dependencies with pnpm 11.13.0 on Node 22, builds the compiled runtime, and then invokes the runner. +`.github/workflows/openrouter-sprint-e2e.yml` runs this validation on pushes to `main` and through manual dispatch. The workflow installs dependencies with pnpm 11.13.1 on Node 22, builds the compiled runtime, and then invokes the runner. The workflow passes `OPENROUTER_API_KEY` from repository secrets. Until that secret is configured, the runner prints its skip message and exits successfully. Set the optional repository variable `CODEUX_E2E_OPENROUTER_MODEL` to override the default model; otherwise the workflow uses `openai/gpt-5-mini`. diff --git a/docs/development/testing-and-quality.md b/docs/development/testing-and-quality.md index c0b2974e52..e564440142 100644 --- a/docs/development/testing-and-quality.md +++ b/docs/development/testing-and-quality.md @@ -73,7 +73,9 @@ pnpm run ci `pnpm run ci` executes `quality:guardrails -> audit -> lint -> test:backend:coverage -> test:dashboard -> build`. -GitHub Actions runs the same signals as separate jobs so a vulnerability finding does not obscure compile, test, or build failures. The `04 Security / dependency audit` job runs the standard `pnpm run audit` command independently, while `02 Static / typecheck and guardrails` runs `pnpm run quality:guardrails`, `pnpm run typecheck`, and `pnpm run typecheck:dashboard`, `05 Test / backend coverage` runs the backend Vitest coverage pass, `06 Test / dashboard suite` runs the dashboard Vitest pass, and `03 Build / server and dashboard artifact` runs the repository bundle checks on Node 22 with pnpm 11.13.0. pnpm 11 uses npm's supported bulk-advisory API, so `pnpm audit --audit-level=high` remains the source of truth without a repository-specific audit client. Workflow health tests under `tests/backend/ci/workflow-health.test.ts` assert this split, the `package.json` audit script value, artifact reuse, the absence of audit execution from build and Playwright lanes, the pinned `pnpm/action-setup` and `actions/setup-node` versions, frozen `pnpm install --frozen-lockfile --ignore-scripts` installs, concurrency cancellation, and cache keys that include runner OS, Node 22, pnpm 11.13.0, and dependency/config hash inputs. +GitHub Actions runs the same signals as separate jobs so a vulnerability finding does not obscure compile, test, or build failures. The `04 Security / dependency audit` job runs the standard `pnpm run audit` command independently, while `02 Static / typecheck and guardrails` runs `pnpm run quality:guardrails`, `pnpm run typecheck`, and `pnpm run typecheck:dashboard`, `05 Test / backend coverage` runs the backend Vitest coverage pass, `06 Test / dashboard suite` runs the dashboard Vitest pass, and `03 Build / server and dashboard artifact` runs the repository bundle checks on Node 22 with pnpm 11.13.1. pnpm 11 uses npm's supported bulk-advisory API, so `pnpm audit --audit-level=high` remains the source of truth without a repository-specific audit client. The workspace enforces pnpm's 24-hour package-age gate in strict mode; newly released versions are installable only through reviewed, exact `minimumReleaseAgeExclude` entries. GitHub Actions, npm dependencies, and the managed runtime base image are tracked by weekly Dependabot updates against `dev`, and every workflow action is pinned to a reviewed immutable commit SHA with its release version recorded in a comment. Workflow health tests under `tests/backend/ci/workflow-health.test.ts` assert this split, dependency-age policy, update tracking, immutable action pins, the `package.json` audit script value, artifact reuse, the absence of audit execution from build and Playwright lanes, frozen `pnpm install --frozen-lockfile --ignore-scripts` installs, concurrency cancellation, and cache keys that include runner OS, Node 22, pnpm 11, and dependency/config hash inputs. + +The project uses the newest compatible stable TypeScript line, currently 5.9.3, rather than TypeScript 7 because the stable `ts-node` 10.9.2 loader used by source-mode commands does not yet support TypeScript 7. `@types/node` stays on the Node 22 line to match the minimum supported runtime and CI. Treat either pin as a compatibility contract: upgrade TypeScript only after the source loader works in `dev:server-only`, and raise the Node types only when the supported runtime baseline moves. The quality guardrail script also audits `vitest.config.ts` directly. It fails if `coverage.include` stops observing `src/**/*.ts`, if any global coverage threshold drops below the locked floors, if the `src/server/activity-cache-service.ts` line threshold is missing, malformed, below 80%, or if that file is excluded from coverage observability. The enforced global thresholds in `vitest.config.ts` are: | Metric | Threshold | @@ -245,7 +247,7 @@ Build first before Playwright because `playwright.config.ts` starts `node dist/i ### OpenRouter Sprint Validation Policy -The optional credentialed sprint validation workflow is `.github/workflows/openrouter-sprint-e2e.yml`. It runs on `push` to `main` and `workflow_dispatch` on `ubuntu-latest`, installs with pnpm 11.13.0 on Node 22, builds the compiled runtime, and invokes `node scripts/e2e/run-openrouter-sprint-validation.mjs`. +The optional credentialed sprint validation workflow is `.github/workflows/openrouter-sprint-e2e.yml`. It runs on `push` to `main` and `workflow_dispatch` on `ubuntu-latest`, installs with pnpm 11.13.1 on Node 22, builds the compiled runtime, and invokes `node scripts/e2e/run-openrouter-sprint-validation.mjs`. This lane only performs real provider-backed sprint validation when the repository secret `OPENROUTER_API_KEY` is configured. If the secret is absent, the runner prints `Skipping OpenRouter sprint validation: OPENROUTER_API_KEY is not set.` and exits with status 0; the workflow is then a successful skip, not a provider validation pass. The workflow sets `CODEUX_E2E_OPENROUTER_MODEL` from the optional repository variable of the same name, defaulting to `openai/gpt-5-mini`. diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index ecaee95f9f..972bc3ad4c 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -5,7 +5,7 @@ This guide gets the MCP server and dashboard running locally with minimal setup. ## Prerequisites - Node.js 22.13+ -- pnpm 11.13.0 (only for building from source) +- pnpm 11.13.1 (only for building from source) - A valid Jules API key - Optional for remote git intelligence: GitHub CLI (`gh`) authenticated diff --git a/docs/operations/runbook.md b/docs/operations/runbook.md index 11a5bc458a..3cf95d9ba6 100644 --- a/docs/operations/runbook.md +++ b/docs/operations/runbook.md @@ -458,7 +458,7 @@ GitHub validation is split by signal: - Backend coverage, dashboard tests, npm install smoke, and the cross-OS orchestration DAG matrix reuse that build artifact and run in parallel after the prerequisite stage. Release-candidate packaging starts after package smoke and can run beside the main-only E2E matrix. Each release-candidate row installs its completed native package and requires packaged backend and renderer readiness plus a clean exit before artifact upload. Matrix bounds are `08 Orchestration` at three shards, `09 E2E` at ten shards, and `10 Release Candidate` at three shards; GitHub's runner quota queues any excess work across the parallel lanes. - `Playwright Diagnostics`, `Release Candidate Diagnostics`, and `Mockup Sprint Diagnostics` are manual-only workflows for focused reruns. They no longer run automatically on every PR. - Superseded runs for the same branch or pull request are cancelled by workflow concurrency groups. -- Security validation is intentionally separated from build and Playwright lanes. The `04 Security / dependency audit` job runs the standard `pnpm run audit`, which is `pnpm audit --audit-level=high`; high-severity dependency findings fail that job without preventing typecheck, tests, build, or Playwright artifacts from reporting their own status. The repository pins pnpm 11.13.0 so the native audit command uses npm's supported bulk-advisory API. +- Security validation is intentionally separated from build and Playwright lanes. The `04 Security / dependency audit` job runs the standard `pnpm run audit`, which is `pnpm audit --audit-level=high`; high-severity dependency findings fail that job without preventing typecheck, tests, build, or Playwright artifacts from reporting their own status. The repository pins pnpm 11.13.1 so the native audit command uses npm's supported bulk-advisory API. Local equivalents: - `pnpm run lint` mirrors the TypeScript validation portion of `Typecheck & Lint`. @@ -471,7 +471,7 @@ Local equivalents: Dependency and cache behavior: - CI restores `node_modules` only as a speed hint and still runs `pnpm install --frozen-lockfile --ignore-scripts` in every job. -- Vitest, Vite, TypeScript, Playwright browser, Electron binary, Electron Builder, and release-candidate caches are keyed to the runner OS, Node 22, pnpm 11.13.0, and dependency/config files that affect the cached output. +- Vitest, Vite, TypeScript, Playwright browser, Electron binary, Electron Builder, and release-candidate caches are keyed to the runner OS, Node 22, pnpm 11.13.1, and dependency/config files that affect the cached output. - Playwright restores the browser cache before running `pnpm exec playwright install chromium`; Linux runners also run `pnpm exec playwright install-deps chromium` so cached browser binaries cannot hide missing OS dependencies. - The build artifact, not repeated source builds, feeds package smoke, orchestration, Playwright, and release-candidate jobs. - `tests/backend/ci/workflow-health.test.ts` audits these workflow invariants so accidental drift in package manager version, Node version, install mode, artifact reuse, audit separation, concurrency cancellation, Playwright artifacts, manual diagnostics, or release-lane separation fails a focused backend test. diff --git a/docs/operations/security-hardening.md b/docs/operations/security-hardening.md index c8bf296f7b..88020b2a97 100644 --- a/docs/operations/security-hardening.md +++ b/docs/operations/security-hardening.md @@ -16,7 +16,7 @@ This page documents the concrete security posture of Code UX. Code UX operates a Dependency vulnerability scanning is enforced via our CI/CD pipeline. -During the CI process, dependencies are evaluated with the standard `pnpm run audit` command (which enforces `pnpm audit --audit-level=high`) alongside normal tests and builds. The repository pins pnpm 11.13.0, whose native audit implementation uses npm's supported bulk-advisory API. The process respects the frozen lockfile installation structure and blocks builds with high-severity risks. +During the CI process, dependencies are evaluated with the standard `pnpm run audit` command (which enforces `pnpm audit --audit-level=high`) alongside normal tests and builds. The repository pins pnpm 11.13.1, whose native audit implementation uses npm's supported bulk-advisory API. The process respects the frozen lockfile installation structure and blocks builds with high-severity risks. Release publishing, release checks, and desktop packaging workflows also run `pnpm run audit` after dependency installation and before packaging or publishing artifacts. This keeps dependency risk evaluation on every artifact-producing path, not only on pull request CI. @@ -25,7 +25,9 @@ Release publishing, release checks, and desktop packaging workflows also run `pn Automated guardrails enforce the repository's dependency and workflow security posture: - GitHub Actions dependency installs must use `pnpm install --frozen-lockfile --ignore-scripts`. Packaging workflows that need native Electron rebuilds keep the install script-free and run the explicit rebuild step (`pnpm run electron:install-deps`) afterward. -- Security-relevant workflows declare explicit least-privilege `permissions` and pin action references to the major action versions already used by the project. +- Security-relevant workflows declare explicit least-privilege `permissions`. Every third-party and first-party action reference is pinned to a reviewed immutable commit SHA, with the corresponding release version retained as an inline comment. +- pnpm enforces a strict 24-hour minimum package age. Explicitly reviewed current releases may be listed by exact package and version under `minimumReleaseAgeExclude`; unreviewed immature resolutions fail in non-interactive CI. +- Dependabot checks npm packages, GitHub Actions, and the managed runtime Docker base weekly against `dev`, so action runtime deprecations, dependency updates, and base-image refreshes are surfaced before release work. - `scripts/check-quality-guardrails.mjs` scans production code and scripts for `curl | bash`, `wget | sh`, `eval`, shell-enabled child process execution, and Docker `--privileged` usage. - Known provider CLI fallback installers are narrowly allowlisted by exact source line and rationale. They remain bounded to documented provider hosts, run inside provider containers, and are used only when the expected provider command is absent. diff --git a/electron-builder.config.cjs b/electron-builder.config.cjs index 91cc08ef19..1eff777f27 100644 --- a/electron-builder.config.cjs +++ b/electron-builder.config.cjs @@ -24,6 +24,9 @@ function onNodeModuleFile(filePath) { } module.exports = { + toolsets: { + nsis: "1.2.1", + }, appId: "com.codeux.desktop", productName: "Code UX", artifactName: "Code-UX-${version}-${os}-${arch}.${ext}", diff --git a/package.json b/package.json index ea2607879a..19ea6b6cd0 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/codeux-ai/codeux/issues" }, "homepage": "https://github.com/codeux-ai/codeux#readme", - "packageManager": "pnpm@11.13.0", + "packageManager": "pnpm@11.13.1", "type": "module", "main": "dist/index.js", "bin": { @@ -109,63 +109,62 @@ }, "dependencies": { "@anthropic-ai/tokenizer": "^0.0.4", - "@modelcontextprotocol/sdk": "^1.27.1", - "ajv": "^8.18.0", - "axios": "^1.16.0", + "@modelcontextprotocol/sdk": "^1.29.0", + "ajv": "^8.20.0", + "axios": "^1.18.1", "colord": "^2.9.3", - "dotenv": "^17.3.1", + "dotenv": "^17.4.2", "escape-html": "^1.0.3", "express": "^5.2.1", - "express-rate-limit": "^8.3.2", + "express-rate-limit": "^8.5.2", "js-tiktoken": "^1.0.21", "mammoth": "^1.12.0", - "multer": "^2.1.1", - "onnxruntime-node": "^1.24.3", + "multer": "^2.2.0", + "onnxruntime-node": "^1.27.0", "p-limit": "^7.3.0", "pdf-parse": "^2.4.5", - "zod": "^4.3.6" + "zod": "^4.4.3" }, "devDependencies": { "@monaco-editor/react": "^4.7.0", - "@playwright/test": "^1.60.0", + "@playwright/test": "^1.61.1", "@preact/preset-vite": "^2.10.5", - "@preact/signals": "^2.9.0", + "@preact/signals": "^2.9.4", "@resvg/resvg-js": "^2.6.2", - "@tailwindcss/typography": "^0.5.19", - "@tailwindcss/vite": "^4.2.1", - "@tanstack/react-router": "1.166.2", + "@tailwindcss/typography": "^0.5.20", + "@tailwindcss/vite": "^4.3.3", + "@tanstack/react-router": "1.170.18", "@testing-library/jest-dom": "^6.9.1", "@testing-library/preact": "^3.2.4", "@testing-library/user-event": "^14.6.1", "@types/escape-html": "^1.0.4", "@types/express": "^5.0.6", - "@types/multer": "^2.1.0", - "@types/node": "^25.3.2", - "@types/supertest": "^7.2.0", - "@types/three": "^0.183.1", - "@vitest/coverage-v8": "^4.1.4", - "electron": "42.3.0", - "electron-builder": "26.8.1", - "gsap": "^3.14.2", - "happy-dom": "^20.8.9", - "jsdom": "^29.0.1", - "lucide-preact": "^0.577.0", - "lucide-react": "^1.7.0", - "marked": "^17.0.3", + "@types/multer": "^2.2.0", + "@types/node": "^22.20.1", + "@types/supertest": "^7.2.1", + "@types/three": "^0.185.1", + "@vitest/coverage-v8": "^4.1.10", + "electron": "43.1.1", + "electron-builder": "26.15.6", + "gsap": "^3.15.0", + "happy-dom": "^20.10.6", + "jsdom": "^29.1.1", + "lucide-preact": "^1.24.0", + "lucide-react": "^1.24.0", + "marked": "^18.0.6", "monaco-editor": "^0.55.1", - "preact": "^10.29.0", - "react": "^19.2.4", - "react-arborist": "^3.8.0", - "react-dom": "^19.2.4", - "react-is": "^19.2.4", + "preact": "^10.29.7", + "react": "^19.2.7", + "react-arborist": "^3.13.2", + "react-dom": "^19.2.7", + "react-is": "^19.2.7", "supertest": "^7.2.2", - "tailwindcss": "^4.2.1", - "three": "^0.183.2", + "tailwindcss": "^4.3.3", + "three": "^0.185.1", "ts-node": "^10.9.2", + "tslib": "^2.8.1", "typescript": "^5.9.3", - "vite": "^8.0.8", - "vitepress": "^1.6.4", - "vitest": "^4.1.4", - "vue": "^3.5.35" + "vite": "^8.1.5", + "vitest": "^4.1.10" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d86300e4c6..7d991930e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,24 +21,24 @@ overrides: dompurify@>=3.0.1 <3.4.0: '>=3.4.0' dompurify@>=3.1.3 <=3.3.1: '>=3.3.2' esbuild@<=0.24.2: '>=0.25.0' - express-rate-limit: ^8.3.2 + express-rate-limit: ^8.5.2 fast-uri: ^3.1.2 form-data@>=4.0.0 <4.0.6: '>=4.0.6' - hono: ^4.12.18 + hono: ^4.12.30 hono@<4.12.25: '>=4.12.25' - ip-address: ^10.1.1 + ip-address: ^10.2.0 js-yaml@<=4.1.1: '>=4.2.0' multer@>=1.0.0 <2.2.0: '>=2.2.0' multer@>=2.0.0-alpha.1 <2.2.0: '>=2.2.0' path-to-regexp: ^8.4.2 - qs: ^6.15.2 + qs: ^6.15.3 tar@<=7.5.15: '>=7.5.16' tmp@>=0.2.6 <0.2.7: '>=0.2.7' undici@>=7.23.0 <7.28.0: 7.28.0 vite@<=6.4.1: '>=6.4.2' vite@<=6.4.2: '>=6.4.3' vite@>=8.0.0 <=8.0.15: '>=8.0.16' - ws: ^8.20.1 + ws: ^8.21.1 '@electron/get>undici': '>=7.28.0' importers: @@ -49,19 +49,19 @@ importers: specifier: ^0.0.4 version: 0.0.4 '@modelcontextprotocol/sdk': - specifier: ^1.27.1 - version: 1.29.0(zod@4.3.6) + specifier: ^1.29.0 + version: 1.29.0(zod@4.4.3) ajv: - specifier: ^8.18.0 - version: 8.18.0 + specifier: ^8.20.0 + version: 8.20.0 axios: - specifier: ^1.16.0 - version: 1.16.0 + specifier: ^1.18.1 + version: 1.18.1 colord: specifier: ^2.9.3 version: 2.9.3 dotenv: - specifier: ^17.3.1 + specifier: ^17.4.2 version: 17.4.2 escape-html: specifier: ^1.0.3 @@ -70,8 +70,8 @@ importers: specifier: ^5.2.1 version: 5.2.1 express-rate-limit: - specifier: ^8.3.2 - version: 8.3.2(express@5.2.1) + specifier: ^8.5.2 + version: 8.5.2(express@5.2.1) js-tiktoken: specifier: ^1.0.21 version: 1.0.21 @@ -79,11 +79,11 @@ importers: specifier: ^1.12.0 version: 1.12.0 multer: - specifier: '>=2.2.0' + specifier: ^2.2.0 version: 2.2.0 onnxruntime-node: - specifier: ^1.24.3 - version: 1.24.3 + specifier: ^1.27.0 + version: 1.27.0 p-limit: specifier: ^7.3.0 version: 7.3.0 @@ -91,39 +91,39 @@ importers: specifier: ^2.4.5 version: 2.4.5 zod: - specifier: ^4.3.6 - version: 4.3.6 + specifier: ^4.4.3 + version: 4.4.3 devDependencies: '@monaco-editor/react': specifier: ^4.7.0 - version: 4.7.0(monaco-editor@0.55.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 4.7.0(monaco-editor@0.55.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@playwright/test': - specifier: ^1.60.0 - version: 1.60.0 + specifier: ^1.61.1 + version: 1.61.1 '@preact/preset-vite': specifier: ^2.10.5 - version: 2.10.5(@babel/core@8.0.1)(preact@10.29.1)(rollup@4.60.4)(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) + version: 2.10.5(@babel/core@8.0.1)(preact@10.29.7)(rollup@4.60.4)(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) '@preact/signals': - specifier: ^2.9.0 - version: 2.9.0(preact@10.29.1) + specifier: ^2.9.4 + version: 2.9.4(preact@10.29.7) '@resvg/resvg-js': specifier: ^2.6.2 version: 2.6.2 '@tailwindcss/typography': - specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.2.2) + specifier: ^0.5.20 + version: 0.5.20(tailwindcss@4.3.3) '@tailwindcss/vite': - specifier: ^4.2.1 - version: 4.2.2(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) + specifier: ^4.3.3 + version: 4.3.3(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) '@tanstack/react-router': - specifier: 1.166.2 - version: 1.166.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: 1.170.18 + version: 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 '@testing-library/preact': specifier: ^3.2.4 - version: 3.2.4(preact@10.29.1) + version: 3.2.4(preact@10.29.7) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@8.20.1) @@ -134,174 +134,92 @@ importers: specifier: ^5.0.6 version: 5.0.6 '@types/multer': - specifier: ^2.1.0 - version: 2.1.0 + specifier: ^2.2.0 + version: 2.2.0 '@types/node': - specifier: ^25.3.2 - version: 25.6.0 + specifier: ^22.20.1 + version: 22.20.1 '@types/supertest': - specifier: ^7.2.0 - version: 7.2.0 + specifier: ^7.2.1 + version: 7.2.1 '@types/three': - specifier: ^0.183.1 - version: 0.183.1 + specifier: ^0.185.1 + version: 0.185.1 '@vitest/coverage-v8': - specifier: ^4.1.4 - version: 4.1.4(vitest@4.1.4) + specifier: ^4.1.10 + version: 4.1.10(vitest@4.1.10) electron: - specifier: 42.3.0 - version: 42.3.0 + specifier: 43.1.1 + version: 43.1.1 electron-builder: - specifier: 26.8.1 - version: 26.8.1(electron-builder-squirrel-windows@26.8.1) + specifier: 26.15.6 + version: 26.15.6(electron-builder-squirrel-windows@26.15.6) gsap: - specifier: ^3.14.2 + specifier: ^3.15.0 version: 3.15.0 happy-dom: - specifier: ^20.8.9 - version: 20.9.0 + specifier: ^20.10.6 + version: 20.10.6 jsdom: - specifier: ^29.0.1 - version: 29.0.2(@noble/hashes@1.8.0) + specifier: ^29.1.1 + version: 29.1.1(@noble/hashes@2.2.0) lucide-preact: - specifier: ^0.577.0 - version: 0.577.0(preact@10.29.1) + specifier: ^1.24.0 + version: 1.24.0(preact@10.29.7) lucide-react: - specifier: ^1.7.0 - version: 1.8.0(react@19.2.5) + specifier: ^1.24.0 + version: 1.24.0(react@19.2.7) marked: - specifier: ^17.0.3 - version: 17.0.6 + specifier: ^18.0.6 + version: 18.0.6 monaco-editor: specifier: ^0.55.1 version: 0.55.1 preact: - specifier: ^10.29.0 - version: 10.29.1 + specifier: ^10.29.7 + version: 10.29.7 react: - specifier: ^19.2.4 - version: 19.2.5 + specifier: ^19.2.7 + version: 19.2.7 react-arborist: - specifier: ^3.8.0 - version: 3.8.0(@types/node@25.6.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: ^3.13.2 + version: 3.13.2(@types/node@22.20.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react-dom: - specifier: ^19.2.4 - version: 19.2.5(react@19.2.5) + specifier: ^19.2.7 + version: 19.2.7(react@19.2.7) react-is: - specifier: ^19.2.4 - version: 19.2.5 + specifier: ^19.2.7 + version: 19.2.7 supertest: specifier: ^7.2.2 version: 7.2.2 tailwindcss: - specifier: ^4.2.1 - version: 4.2.2 + specifier: ^4.3.3 + version: 4.3.3 three: - specifier: ^0.183.2 - version: 0.183.2 + specifier: ^0.185.1 + version: 0.185.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@25.6.0)(typescript@5.9.3) + version: 10.9.2(@types/node@22.20.1)(typescript@5.9.3) + tslib: + specifier: ^2.8.1 + version: 2.8.1 typescript: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: '>=8.0.16' - version: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) - vitepress: - specifier: ^1.6.4 - version: 1.6.4(@algolia/client-search@5.52.1)(@types/node@25.6.0)(axios@1.16.0)(jiti@2.6.1)(postcss@8.5.15)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@5.9.3) + specifier: ^8.1.5 + version: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) vitest: - specifier: ^4.1.4 - version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(happy-dom@20.9.0)(jsdom@29.0.2(@noble/hashes@1.8.0))(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) - vue: - specifier: ^3.5.35 - version: 3.5.35(typescript@5.9.3) + specifier: ^4.1.10 + version: 4.1.10(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(happy-dom@20.10.6)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) packages: - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@algolia/abtesting@1.18.1': - resolution: {integrity: sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw==} - engines: {node: '>= 14.0.0'} - - '@algolia/autocomplete-core@1.17.7': - resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} - - '@algolia/autocomplete-plugin-algolia-insights@1.17.7': - resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} - peerDependencies: - search-insights: '>= 1 < 3' - - '@algolia/autocomplete-preset-algolia@1.17.7': - resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/autocomplete-shared@1.17.7': - resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/client-abtesting@5.52.1': - resolution: {integrity: sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-analytics@5.52.1': - resolution: {integrity: sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-common@5.52.1': - resolution: {integrity: sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-insights@5.52.1': - resolution: {integrity: sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-personalization@5.52.1': - resolution: {integrity: sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-query-suggestions@5.52.1': - resolution: {integrity: sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-search@5.52.1': - resolution: {integrity: sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg==} - engines: {node: '>= 14.0.0'} - - '@algolia/ingestion@1.52.1': - resolution: {integrity: sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw==} - engines: {node: '>= 14.0.0'} - - '@algolia/monitoring@1.52.1': - resolution: {integrity: sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/recommend@5.52.1': - resolution: {integrity: sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-browser-xhr@5.52.1': - resolution: {integrity: sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-fetch@5.52.1': - resolution: {integrity: sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-node-http@5.52.1': - resolution: {integrity: sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg==} - engines: {node: '>= 14.0.0'} - '@anthropic-ai/tokenizer@0.0.4': resolution: {integrity: sha512-EHRKbxlxlc8W4KCBEseByJ7YwyYCmgu9OyN59H9+IYIGPoKv8tXyQXinkeGDI+cI8Tiuz9wk2jZb/kK7AyvL7g==} @@ -309,8 +227,8 @@ packages: resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@7.0.10': - resolution: {integrity: sha512-KyOb19eytNSELkmdqzZZUXWCU25byIlOld5qVFg0RYdS0T3tt7jeDByxk9hIAC73frclD8GKrHttr0SUjKCCdQ==} + '@asamuzakjp/dom-selector@7.1.1': + resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/generational-cache@1.0.1': @@ -400,11 +318,6 @@ packages: resolution: {integrity: sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==} engines: {node: ^22.18.0 || >=24.11.0} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} @@ -513,35 +426,12 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - '@dimforge/rapier3d-compat@0.12.0': resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} - '@docsearch/css@3.8.2': - resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} - - '@docsearch/js@3.8.2': - resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} - - '@docsearch/react@3.8.2': - resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true + '@electron-internal/extract-zip@1.0.4': + resolution: {integrity: sha512-Zr1Vs7E9tpCNhZHDAbFVXc2gEVCG9RqPDjrno5+bdgB6LRAuvgyMHJut4NCVyYwtAieapMzc3fiQ3CSTi75ARg==} + engines: {node: '>=22.12.0'} '@electron/asar@3.4.1': resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} @@ -583,14 +473,14 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.10.0': - resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} '@exodus/bytes@1.15.0': resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} @@ -607,12 +497,6 @@ packages: peerDependencies: hono: '>=4.12.25' - '@iconify-json/simple-icons@1.2.84': - resolution: {integrity: sha512-v4JVu6xIewGoETD4mm2k6UAdFAbTlY1duw5ZNSxYORfs2yFsHDhoU9Omn/BgrV0nR/ptWkF3ZIr/ZHoYXI/6Jw==} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -733,24 +617,46 @@ packages: resolution: {integrity: sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} - '@playwright/test@1.60.0': - resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} + '@peculiar/asn1-schema@2.8.0': + resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} + + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/webcrypto@1.7.1': + resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} + engines: {node: '>=14.18.0'} + + '@playwright/test@1.61.1': + resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} engines: {node: '>=18'} hasBin: true @@ -760,11 +666,11 @@ packages: '@babel/core': '>=7.29.6' vite: '>=6.4.3' - '@preact/signals-core@1.14.1': - resolution: {integrity: sha512-vxPpfXqrwUe9lpjqfYNjAF/0RF/eFGeLgdJzdmIIZjpOnTmGmAB4BjWone562mJGMRP4frU6iZ6ei3PDsu52Ng==} + '@preact/signals-core@1.14.4': + resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} - '@preact/signals@2.9.0': - resolution: {integrity: sha512-hYrY0KyUqkDgOl1qba/JGn6y81pXnurn21PMaxfcMwdncdZ3M/oVdmpTvEnsGjh48dIwDVc7bjWHqIsngSjYug==} + '@preact/signals@2.9.4': + resolution: {integrity: sha512-JzAZXcRkmCNf9wVuxNI7UWseu3++Mm0dZ6UFyjFby44CyKIl7Y06oOsW3KA5Nx0L8tpE87OY5pLe0uQ0xcWKrg==} peerDependencies: preact: '>= 10.25.0 || >=11.0.0-0' @@ -874,97 +780,97 @@ packages: resolution: {integrity: sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==} engines: {node: '>= 10'} - '@rolldown/binding-android-arm64@1.0.3': - resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.3': - resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.3': - resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.3': - resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': - resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.3': - resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.3': - resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.3': - resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.3': - resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.3': - resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.3': - resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.3': - resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.3': - resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.3': - resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.3': - resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1123,30 +1029,6 @@ packages: cpu: [x64] os: [win32] - '@shikijs/core@2.5.0': - resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} - - '@shikijs/engine-javascript@2.5.0': - resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} - - '@shikijs/engine-oniguruma@2.5.0': - resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} - - '@shikijs/langs@2.5.0': - resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} - - '@shikijs/themes@2.5.0': - resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} - - '@shikijs/transformers@2.5.0': - resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} - - '@shikijs/types@2.5.0': - resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -1158,69 +1040,69 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tailwindcss/node@4.2.2': - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} - '@tailwindcss/oxide-android-arm64@4.2.2': - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.2.2': - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.2': - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.2.2': - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.2.2': - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.2.2': - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -1231,38 +1113,38 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.2.2': - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} engines: {node: '>= 20'} - '@tailwindcss/typography@0.5.19': - resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + '@tailwindcss/typography@0.5.20': + resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' - '@tailwindcss/vite@4.2.2': - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} + '@tailwindcss/vite@4.3.3': + resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} peerDependencies: vite: '>=6.4.3' - '@tanstack/history@1.161.4': - resolution: {integrity: sha512-Kp/WSt411ZWYvgXy6uiv5RmhHrz9cAml05AQPrtdAp7eUqvIDbMGPnML25OKbzR3RJ1q4wgENxDTvlGPa9+Mww==} + '@tanstack/history@1.162.0': + resolution: {integrity: sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA==} engines: {node: '>=20.19'} - '@tanstack/react-router@1.166.2': - resolution: {integrity: sha512-pKhUtrvVLlhjWhsHkJSuIzh1J4LcP+8ErbIqRLORX9Js8dUFMKoT0+8oFpi+P8QRpuhm/7rzjYiWfcyTsqQZtA==} + '@tanstack/react-router@1.170.18': + resolution: {integrity: sha512-wpbGYZEp/fmz1q4bn7BD8VZ+/VZ7GBqSJv5V969pU+chP8y7dquWDmKTFMohvUegb9lg12m1uPVvD6kB2wORvQ==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -1274,8 +1156,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.166.2': - resolution: {integrity: sha512-zn3NhENOAX9ToQiX077UV2OH3aJKOvV2ZMNZZxZ3gDG3i3WqL8NfWfEgetEAfMN37/Mnt90PpotYgf7IyuoKqQ==} + '@tanstack/router-core@1.171.15': + resolution: {integrity: sha512-IILCDcLaItMZQ2jEmCABHY1Nhjjn5XUvwpQp3e4Nmu+vfg0BgYFuu/QASz2SwE2ZNbVMrvt8X/wxa+Gg5aErxA==} engines: {node: '>=20.19'} '@tanstack/store@0.9.3': @@ -1316,8 +1198,8 @@ packages: '@tweenjs/tween.js@23.1.3': resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1361,9 +1243,6 @@ packages: '@types/gensync@1.0.5': resolution: {integrity: sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-cache-semantics@4.2.0': resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} @@ -1376,38 +1255,26 @@ packages: '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/multer@2.1.0': - resolution: {integrity: sha512-zYZb0+nJhOHtPpGDb3vqPjwpdeGlGC157VpkqNQL+UU2qwoacoQ7MpsAmUptI/0Oa127X32JzWDqQVEXp2RcIA==} + '@types/multer@2.2.0': + resolution: {integrity: sha512-3U1troeqGV8Ntp7Q3klwf4zr23VEoqYVocYXaswm9+8z3O9UHDYAqLxjJ/h550iRADTjKdOdhhasXw6gD6kYtg==} '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} + '@types/node@24.12.4': resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} - - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + '@types/node@26.1.1': + resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -1430,24 +1297,15 @@ packages: '@types/superagent@8.1.9': resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} - '@types/supertest@7.2.0': - resolution: {integrity: sha512-uh2Lv57xvggst6lCqNdFAmDSvoMG7M/HDtX4iUCquxQ5EGPtaPM5PL5Hmi7LCvOG8db7YaCPNJEeoI8s/WzIQw==} + '@types/supertest@7.2.1': + resolution: {integrity: sha512-4CbBvoYVLHL7+yhbYrZET0vsvuyXTC05aRe7dNQkwMzm56auceoy6Yu3K50uZmwfHna1os3CMSgM/3QVkUtPTw==} - '@types/three@0.183.1': - resolution: {integrity: sha512-f2Pu5Hrepfgavttdye3PsH5RWyY/AvdZQwIVhrc4uNtvF7nOWJacQKcoVJn0S4f0yYbmAE6AR+ve7xDcuYtMGw==} + '@types/three@0.185.1': + resolution: {integrity: sha512-db1xTb+EgYF2didW+eudSvVPtn75zo+fGsY8ShQrJY/B5ZBmC2Fiaykv3aImHAlCNEGuMPkPGXBJGLwzu5mC7A==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - - '@types/web-bluetooth@0.0.21': - resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} @@ -1457,33 +1315,20 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@ungap/structured-clone@1.3.1': - resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} - - '@vitejs/plugin-vue@5.2.4': - resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} - engines: {node: ^18.0.0 || >=20.0.0} - peerDependencies: - vite: '>=6.4.3' - vue: ^3.2.25 - - '@vitest/coverage-v8@4.1.4': - resolution: {integrity: sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==} + '@vitest/coverage-v8@4.1.10': + resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==} peerDependencies: - '@vitest/browser': 4.1.4 - vitest: 4.1.4 + '@vitest/browser': 4.1.10 + vitest: 4.1.10 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.4': - resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@4.1.4': - resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 vite: '>=6.4.3' @@ -1493,111 +1338,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.4': - resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} - - '@vitest/runner@4.1.4': - resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} - - '@vitest/snapshot@4.1.4': - resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} - - '@vitest/spy@4.1.4': - resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} - - '@vitest/utils@4.1.4': - resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} - - '@vue/compiler-core@3.5.35': - resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} - - '@vue/compiler-dom@3.5.35': - resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} - - '@vue/compiler-sfc@3.5.35': - resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==} + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vue/compiler-ssr@3.5.35': - resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==} - - '@vue/devtools-api@7.7.9': - resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} - - '@vue/devtools-kit@7.7.9': - resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} - - '@vue/devtools-shared@7.7.9': - resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} - - '@vue/reactivity@3.5.35': - resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==} - - '@vue/runtime-core@3.5.35': - resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==} - - '@vue/runtime-dom@3.5.35': - resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==} - - '@vue/server-renderer@3.5.35': - resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==} - peerDependencies: - vue: 3.5.35 - - '@vue/shared@3.5.35': - resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} - - '@vueuse/core@12.8.2': - resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} - - '@vueuse/integrations@12.8.2': - resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} - peerDependencies: - async-validator: ^4 - axios: ^1 - change-case: ^5 - drauu: ^0.4 - focus-trap: ^7 - fuse.js: ^7 - idb-keyval: ^6 - jwt-decode: ^4 - nprogress: ^0.2 - qrcode: ^1.5 - sortablejs: ^1 - universal-cookie: ^7 - peerDependenciesMeta: - async-validator: - optional: true - axios: - optional: true - change-case: - optional: true - drauu: - optional: true - focus-trap: - optional: true - fuse.js: - optional: true - idb-keyval: - optional: true - jwt-decode: - optional: true - nprogress: - optional: true - qrcode: - optional: true - sortablejs: - optional: true - universal-cookie: - optional: true + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vueuse/metadata@12.8.2': - resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vueuse/shared@12.8.2': - resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} - '@webgpu/types@0.1.69': - resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@xmldom/xmldom@0.8.13': resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} @@ -1628,6 +1382,10 @@ packages: resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} engines: {node: '>=12.0'} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -1640,20 +1398,8 @@ packages: ajv: optional: true - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - - algoliasearch@5.52.1: - resolution: {integrity: sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg==} - engines: {node: '>= 14.0.0'} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1667,15 +1413,12 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.8.1: - resolution: {integrity: sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==} + app-builder-lib@26.15.6: + resolution: {integrity: sha512-lN6BliNJLnS2ruBdYd1j1rzd2yl4ZwKqyTtAwVznIkkadOR9cFvRz/tNQ6nd824AobnFZKhcdFrpIGDnr0PRSg==} engines: {node: '>=14.0.0'} peerDependencies: - dmg-builder: 26.8.1 - electron-builder-squirrel-windows: 26.8.1 + dmg-builder: 26.15.6 + electron-builder-squirrel-windows: 26.15.6 append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} @@ -1703,9 +1446,9 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} @@ -1714,10 +1457,6 @@ packages: ast-v8-to-istanbul@1.0.0: resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - async-exit-hook@2.0.1: resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} engines: {node: '>=0.12.0'} @@ -1736,8 +1475,11 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.16.0: - resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==} + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} babel-plugin-transform-hook-names@1.0.2: resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} @@ -1762,12 +1504,12 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - birpc@2.9.0: - resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} - bluebird@3.4.7: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} @@ -1794,21 +1536,20 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} + builder-util-runtime@9.7.0: + resolution: {integrity: sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==} engines: {node: '>=12.0.0'} - builder-util@26.8.1: - resolution: {integrity: sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==} + builder-util@26.15.3: + resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} + engines: {node: '>=14.0.0'} busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -1818,6 +1559,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} @@ -1841,9 +1586,6 @@ packages: caniuse-lite@1.0.30001788: resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -1852,12 +1594,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -1873,10 +1609,6 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1898,9 +1630,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -1934,8 +1663,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@2.0.1: - resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==} + cookie-es@3.1.1: + resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==} cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} @@ -1948,10 +1677,6 @@ packages: cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} - copy-anything@4.0.5: - resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} - engines: {node: '>=18'} - core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -1959,9 +1684,6 @@ packages: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -1991,9 +1713,6 @@ packages: engines: {node: '>=4'} hasBin: true - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - data-urls@7.0.0: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -2038,10 +1757,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2049,9 +1764,6 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} @@ -2065,14 +1777,8 @@ packages: dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - dmg-builder@26.8.1: - resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true + dmg-builder@26.15.6: + resolution: {integrity: sha512-nr5vQxEhM0REomp1qiHbc6V99yrfBZy+wUU56VXADfSOlLj8PdLqsHiRe7b+FbqKesiyv4ax+k1GVwGonYKuCg==} dnd-core@14.0.1: resolution: {integrity: sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==} @@ -2118,6 +1824,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -2126,16 +1835,16 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@26.8.1: - resolution: {integrity: sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==} + electron-builder-squirrel-windows@26.15.6: + resolution: {integrity: sha512-Vgw0bVXtTjZmD3O0Wl1gbo4eiI0Mqp7FQBsFgMR+wNwySiPJ08jadS0PZiSwP2cKCVaEclBHbKeBVTwil+SJfQ==} - electron-builder@26.8.1: - resolution: {integrity: sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==} + electron-builder@26.15.6: + resolution: {integrity: sha512-jxlHRjqYrlTgLVo/aoACGpiki3QFYv8s4f2djsqaEbwTBZ9PcTBK03Tj/HMa65kiE0hdZxxbZdmVFo22eou2wA==} engines: {node: '>=14.0.0'} hasBin: true - electron-publish@26.8.1: - resolution: {integrity: sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==} + electron-publish@26.15.3: + resolution: {integrity: sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==} electron-to-chromium@1.5.340: resolution: {integrity: sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==} @@ -2144,14 +1853,11 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@42.3.0: - resolution: {integrity: sha512-9ZiLdRXk+WDxW1OgIUz8J2rIQ5TYU9o629gCOjU48Q3dQiOmym7osWsH5Ubs/Jh4uuFLn6m6SBD2rmRXLAPz9g==} + electron@43.1.1: + resolution: {integrity: sha512-I5c5vfuVvaXpWx3IZdwvXgxQW44+e7OP1wXGVQkogLeSFSkUZ6sLCcWV05AdEcs65AO5tAIJJwbp7ixw+LdarA==} engines: {node: '>= 22.12.0'} hasBin: true - emoji-regex-xs@1.0.0: - resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2166,22 +1872,22 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + enhanced-resolve@5.24.2: + resolution: {integrity: sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==} engines: {node: '>=10.13.0'} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2254,8 +1960,8 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - express-rate-limit@8.3.2: - resolution: {integrity: sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==} + express-rate-limit@8.5.2: + resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -2264,30 +1970,15 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2307,9 +1998,6 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} - focus-trap@7.8.0: - resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} - follow-redirects@1.16.0: resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} @@ -2343,6 +2031,10 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + engines: {node: '>=14.14'} + fs-extra@11.3.5: resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} @@ -2406,6 +2098,10 @@ packages: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} + global-agent@4.1.3: + resolution: {integrity: sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g==} + engines: {node: '>=10.0'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -2424,8 +2120,8 @@ packages: gsap@3.15.0: resolution: {integrity: sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==} - happy-dom@20.9.0: - resolution: {integrity: sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==} + happy-dom@20.10.6: + resolution: {integrity: sha512-6QD0ilzDDt93tX44y8tbmZdAcdTRYDhUP+Asgi6pC8Pp5IA3cvaZGyoVN/EGtlq9ziT65iPuBBn3ASLr6hCgVw==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -2447,20 +2143,10 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.3: - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} - engines: {node: '>= 0.4'} - hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -2472,9 +2158,6 @@ packages: resolution: {integrity: sha512-uyZtpnYxM9CmQ7QsQknM4zN8EftNqhON1qYeIKM0Se67CCEe2c44xyGURwB0axX2fBDu1dqHrHAc1hmNT8ITkw==} engines: {node: '>=16.9.0'} - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -2486,9 +2169,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -2504,26 +2184,18 @@ packages: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -2623,10 +2295,6 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-what@5.5.0: - resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} - engines: {node: '>=18'} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -2673,8 +2341,8 @@ packages: engines: {node: '>=10'} hasBin: true - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true jose@6.2.2: @@ -2693,8 +2361,8 @@ packages: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true - jsdom@29.0.2: - resolution: {integrity: sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w==} + jsdom@29.1.1: + resolution: {integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -2710,9 +2378,6 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -2840,13 +2505,13 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lucide-preact@0.577.0: - resolution: {integrity: sha512-fCY59YQ2OMYWqE1V7k8HwfXyiBMHAfTI1roCOasdc+Cekya7BIObSJ/cil+tVMSbU6siv4uZlaz5twAGmkYqIQ==} + lucide-preact@1.24.0: + resolution: {integrity: sha512-At4Yi9tcwgVPrKeDkK/JcY/E+brWHlEdKB7lTl7LGP455DlarbcEsoUxHcgSVA7TFohd49EzlK7q+oGv87cbZg==} peerDependencies: preact: ^10.27.2 - lucide-react@1.8.0: - resolution: {integrity: sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==} + lucide-react@1.24.0: + resolution: {integrity: sha512-YT6mBD8lGKkg4nM39enlm94/sfJIiW0YKUT60fBy4YK8tai31ylg1VhGNWxkpSKHo9UagfnZqwIff3HTDQwXeA==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2872,16 +2537,13 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - mark.js@8.11.1: - resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - marked@14.0.0: resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} engines: {node: '>= 18'} hasBin: true - marked@17.0.6: - resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==} + marked@18.0.6: + resolution: {integrity: sha512-MrV5puXBfuiy6wl6DLaq3BtIJQAJToAd5zt/ZKhRfGRAuFPALE7/4Y7jnxRQoEgK/pBgurGqLyAuRgZ2xOjr6w==} engines: {node: '>= 20'} hasBin: true @@ -2889,13 +2551,14 @@ packages: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} + matcher@4.0.0: + resolution: {integrity: sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==} + engines: {node: '>=10'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} @@ -2914,28 +2577,13 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - meshoptimizer@1.0.1: - resolution: {integrity: sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==} + meshoptimizer@1.1.1: + resolution: {integrity: sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g==} methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -2991,16 +2639,10 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minisearch@7.2.0: - resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} - minizlib@3.1.0: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -3028,9 +2670,6 @@ packages: resolution: {integrity: sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw==} engines: {node: '>=22.12.0'} - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} @@ -3042,6 +2681,9 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-releases@2.0.37: resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} @@ -3087,14 +2729,11 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - oniguruma-to-es@3.1.1: - resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} - - onnxruntime-common@1.24.3: - resolution: {integrity: sha512-GeuPZO6U/LBJXvwdaqHbuUmoXiEdeCjWi/EG7Y1HNnDwJYuk6WUbNXpF6luSUY8yASul3cmUlLGrCCL1ZgVXqA==} + onnxruntime-common@1.27.0: + resolution: {integrity: sha512-3KxL5wIVqa8Ex08jxSzncm9CMgw8CjOFyOQ7SxvG9o0cVLlhTNKXyIQuTbtX4tGPJEf73OER2xrjt4HJSBL4ow==} - onnxruntime-node@1.24.3: - resolution: {integrity: sha512-JH7+czbc8ALA819vlTgcV+Q214/+VjGeBHDjX81+ZCD0PCVCIFGFNtT0V4sXG/1JXypKPgScQcB3ij/hk3YnTg==} + onnxruntime-node@1.27.0: + resolution: {integrity: sha512-QEzGwrvNBgv4uPVdnbHsOGG4G6T96mdlcFI8aAKPjMU8wOPpVocPXb6k3QGkaZagVTv2G9Bnnbo6Z3JdXr1fQw==} os: [win32, darwin, linux] option@0.2.4: @@ -3115,8 +2754,8 @@ packages: pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -3149,12 +2788,6 @@ packages: resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} engines: {node: '>=12', npm: '>=6'} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3166,17 +2799,25 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} - playwright-core@1.60.0: - resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} + + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} engines: {node: '>=18'} hasBin: true - playwright@1.60.0: - resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==} + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} engines: {node: '>=18'} hasBin: true @@ -3196,8 +2837,8 @@ packages: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.19: + resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} engines: {node: ^10 || ^12 || >=14} postject@1.0.0-alpha.6: @@ -3205,8 +2846,13 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - preact@10.29.1: - resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} + preact@10.29.7: + resolution: {integrity: sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==} + peerDependencies: + preact-render-to-string: '>=5' + peerDependenciesMeta: + preact-render-to-string: + optional: true pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} @@ -3230,9 +2876,6 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -3248,8 +2891,15 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.15.2: - resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} quick-lru@5.1.1: @@ -3264,8 +2914,8 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - react-arborist@3.8.0: - resolution: {integrity: sha512-66UQK2mWtodjkHg4efiIYjQt0VlFhQ4LXTphcqHi0+1Jc7hAxcxAC1SbmCUCpZYUW7C+14WgsnYgBRqG0AYb1A==} + react-arborist@3.13.2: + resolution: {integrity: sha512-Qa5h2MwBGflTZXsg8vXOHOonF04w31u6DyPL06iyboe+A8CMqxRxgI/Imd5mwTo679iNNJ4e7CuinJGe3rGqgg==} peerDependencies: react: '>= 16.14' react-dom: '>= 16.14' @@ -3288,10 +2938,10 @@ packages: '@types/react': optional: true - react-dom@19.2.5: - resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: - react: ^19.2.5 + react: ^19.2.7 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -3299,8 +2949,8 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@19.2.5: - resolution: {integrity: sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ==} + react-is@19.2.7: + resolution: {integrity: sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==} react-window@1.8.11: resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==} @@ -3309,8 +2959,8 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.2.5: - resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} read-binary-file-arch@1.0.6: @@ -3334,15 +2984,6 @@ packages: redux@5.0.1: resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.1.0: - resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -3369,9 +3010,6 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -3381,8 +3019,8 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} - rolldown@1.0.3: - resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -3422,9 +3060,6 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - search-insights@2.17.3: - resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} - semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -3449,14 +3084,18 @@ packages: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} - seroval-plugins@1.5.2: - resolution: {integrity: sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg==} + serialize-error@8.1.0: + resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} + engines: {node: '>=10'} + + seroval-plugins@1.5.5: + resolution: {integrity: sha512-+BDhqYM6CEn3x09v44dpa9p6974FuUB2dxk+Ctn04k0cO1Zt6QODTXfmEZK0eBaTe/fJBvP4NMGuNJ+R8T+QMg==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.5.2: - resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==} + seroval@1.5.5: + resolution: {integrity: sha512-bSjOuPcwPKLSJNhr9+bZxA20nQxVle5J5MNsYRVE6cIg7KpRLXGupymePavu0jrxlPiPsr4xGZSB8yUY2sH2sw==} engines: {node: '>=10'} serve-static@2.2.1: @@ -3485,9 +3124,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@2.5.0: - resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} - side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -3500,8 +3136,8 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -3517,14 +3153,6 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3540,13 +3168,6 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - speakingurl@14.0.1: - resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} - engines: {node: '>=0.10.0'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3592,9 +3213,6 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3611,10 +3229,6 @@ packages: resolution: {integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==} engines: {node: '>=14.18.0'} - superjson@2.2.6: - resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} - engines: {node: '>=16'} - supertest@7.2.2: resolution: {integrity: sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==} engines: {node: '>=14.18.0'} @@ -3626,14 +3240,11 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} - tailwindcss@4.2.2: - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} - - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} tar@7.5.16: @@ -3647,8 +3258,8 @@ packages: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} - three@0.183.2: - resolution: {integrity: sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==} + three@0.185.1: + resolution: {integrity: sha512-5aojFCXKwnjBRZvUnt3WFfEcvUJgkN5LlijRFN95hMy8WVkG4I0QNcJE+OuWvuJ0bOdStrbfXn0pkd6/QyiAlg==} tiktoken@1.0.22: resolution: {integrity: sha512-PKvy1rVF1RibfF3JlXBSP0Jrcw2uq3yXdgcEXtKTYn3QJ/cBRBHDnrJ5jHky+MENZ6DIPwNUGWpkVx+7joCpNA==} @@ -3656,12 +3267,6 @@ packages: tiny-async-pool@1.3.0: resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3669,10 +3274,6 @@ packages: resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -3707,9 +3308,6 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} @@ -3734,6 +3332,10 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -3756,11 +3358,14 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} undici@6.27.0: resolution: {integrity: sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==} @@ -3774,21 +3379,6 @@ packages: resolution: {integrity: sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==} engines: {node: '>=22.19.0'} - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -3801,15 +3391,15 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unzipper@0.12.5: + resolution: {integrity: sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -3828,28 +3418,18 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-prerender-plugin@0.5.13: resolution: {integrity: sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==} peerDependencies: vite: '>=6.4.3' - vite@8.0.16: - resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + vite@8.1.5: + resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 + '@vitejs/devtools': ^0.3.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -3886,32 +3466,20 @@ packages: yaml: optional: true - vitepress@1.6.4: - resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} - hasBin: true - peerDependencies: - markdown-it-mathjax3: ^4 - postcss: ^8 - peerDependenciesMeta: - markdown-it-mathjax3: - optional: true - postcss: - optional: true - - vitest@4.1.4: - resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.4 - '@vitest/browser-preview': 4.1.4 - '@vitest/browser-webdriverio': 4.1.4 - '@vitest/coverage-istanbul': 4.1.4 - '@vitest/coverage-v8': 4.1.4 - '@vitest/ui': 4.1.4 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' jsdom: '*' vite: '>=6.4.3' @@ -3939,18 +3507,13 @@ packages: jsdom: optional: true - vue@3.5.35: - resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + webcrypto-core@1.9.2: + resolution: {integrity: sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==} + webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -4006,8 +3569,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4052,9 +3615,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -4075,136 +3635,19 @@ packages: peerDependencies: zod: ^3.25.28 || ^4 - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} snapshots: - 7zip-bin@5.2.0: {} - '@adobe/css-tools@4.4.4': {} - '@algolia/abtesting@1.18.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3)': + '@anthropic-ai/tokenizer@0.0.4': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights + '@types/node': 18.19.130 + tiktoken: 1.0.22 - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)': - dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) - '@algolia/client-search': 5.52.1 - algoliasearch: 5.52.1 - - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)': - dependencies: - '@algolia/client-search': 5.52.1 - algoliasearch: 5.52.1 - - '@algolia/client-abtesting@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/client-analytics@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/client-common@5.52.1': {} - - '@algolia/client-insights@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/client-personalization@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/client-query-suggestions@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/client-search@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/ingestion@1.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/monitoring@1.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/recommend@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - - '@algolia/requester-browser-xhr@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - - '@algolia/requester-fetch@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - - '@algolia/requester-node-http@5.52.1': - dependencies: - '@algolia/client-common': 5.52.1 - - '@anthropic-ai/tokenizer@0.0.4': - dependencies: - '@types/node': 18.19.130 - tiktoken: 1.0.22 - - '@asamuzakjp/css-color@5.1.11': + '@asamuzakjp/css-color@5.1.11': dependencies: '@asamuzakjp/generational-cache': 1.0.1 '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) @@ -4212,7 +3655,7 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@asamuzakjp/dom-selector@7.0.10': + '@asamuzakjp/dom-selector@7.1.1': dependencies: '@asamuzakjp/generational-cache': 1.0.1 '@asamuzakjp/nwsapi': 2.3.9 @@ -4226,7 +3669,7 @@ snapshots: '@babel/code-frame@7.29.0': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -4317,10 +3760,6 @@ snapshots: '@babel/template': 8.0.0 '@babel/types': 8.0.0 - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 @@ -4371,9 +3810,9 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -4437,38 +3876,9 @@ snapshots: '@csstools/css-tokenizer@4.0.0': {} - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.15.0 - ajv-keywords: 3.5.2(ajv@6.15.0) - '@dimforge/rapier3d-compat@0.12.0': {} - '@docsearch/css@3.8.2': {} - - '@docsearch/js@3.8.2(@algolia/client-search@5.52.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)': - dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.52.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3) - preact: 10.29.1 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights - - '@docsearch/react@3.8.2(@algolia/client-search@5.52.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) - '@docsearch/css': 3.8.2 - algoliasearch: 5.52.1 - optionalDependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' + '@electron-internal/extract-zip@1.0.4': {} '@electron/asar@3.4.1': dependencies: @@ -4524,7 +3934,7 @@ snapshots: fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -4547,7 +3957,7 @@ snapshots: dir-compare: 4.2.0 fs-extra: 11.3.5 minimatch: 9.0.9 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -4562,36 +3972,30 @@ snapshots: - supports-color optional: true - '@emnapi/core@1.10.0': + '@emnapi/core@1.11.1': dependencies: - '@emnapi/wasi-threads': 1.2.1 + '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.10.0': + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.1': + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true - '@exodus/bytes@1.15.0(@noble/hashes@1.8.0)': + '@exodus/bytes@1.15.0(@noble/hashes@2.2.0)': optionalDependencies: - '@noble/hashes': 1.8.0 + '@noble/hashes': 2.2.0 '@hono/node-server@1.19.14(hono@4.12.26)': dependencies: hono: 4.12.26 - '@iconify-json/simple-icons@1.2.84': - dependencies: - '@iconify/types': 2.0.0 - - '@iconify/types@2.0.0': {} - '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.3 @@ -4633,25 +4037,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.26) - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.0.7 express: 5.2.1 - express-rate-limit: 8.3.2(express@5.2.1) + express-rate-limit: 8.5.2(express@5.2.1) hono: 4.12.26 jose: 6.2.2 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 - zod: 4.3.6 - zod-to-json-schema: 3.25.2(zod@4.3.6) + zod: 4.4.3 + zod-to-json-schema: 3.25.2(zod@4.4.3) transitivePeerDependencies: - supports-color @@ -4659,12 +4063,12 @@ snapshots: dependencies: state-local: 1.0.7 - '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@monaco-editor/loader': 1.7.0 monaco-editor: 0.55.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) '@napi-rs/canvas-android-arm64@0.1.80': optional: true @@ -4709,68 +4113,94 @@ snapshots: '@napi-rs/canvas-linux-x64-musl': 0.1.80 '@napi-rs/canvas-win32-x64-msvc': 0.1.80 - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 optional: true + '@noble/hashes@1.4.0': {} + '@noble/hashes@1.8.0': {} - '@oxc-project/types@0.133.0': {} + '@noble/hashes@2.2.0': {} + + '@oxc-project/types@0.139.0': {} '@paralleldrive/cuid2@2.3.1': dependencies: '@noble/hashes': 1.8.0 - '@playwright/test@1.60.0': + '@peculiar/asn1-schema@2.8.0': + dependencies: + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/json-schema@1.1.12': + dependencies: + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 + + '@peculiar/webcrypto@1.7.1': dependencies: - playwright: 1.60.0 + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + tslib: 2.8.1 + webcrypto-core: 1.9.2 - '@preact/preset-vite@2.10.5(@babel/core@8.0.1)(preact@10.29.1)(rollup@4.60.4)(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1))': + '@playwright/test@1.61.1': + dependencies: + playwright: 1.61.1 + + '@preact/preset-vite@2.10.5(@babel/core@8.0.1)(preact@10.29.7)(rollup@4.60.4)(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0))': dependencies: '@babel/core': 8.0.1 '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@8.0.1) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@8.0.1) - '@prefresh/vite': 2.4.12(preact@10.29.1)(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) + '@prefresh/vite': 2.4.12(preact@10.29.7)(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) '@rollup/pluginutils': 5.3.0(rollup@4.60.4) babel-plugin-transform-hook-names: 1.0.2(@babel/core@8.0.1) debug: 4.4.3 magic-string: 0.30.21 picocolors: 1.1.1 - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) - vite-prerender-plugin: 0.5.13(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) + vite: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) + vite-prerender-plugin: 0.5.13(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) zimmerframe: 1.1.4 transitivePeerDependencies: - preact - rollup - supports-color - '@preact/signals-core@1.14.1': {} + '@preact/signals-core@1.14.4': {} - '@preact/signals@2.9.0(preact@10.29.1)': + '@preact/signals@2.9.4(preact@10.29.7)': dependencies: - '@preact/signals-core': 1.14.1 - preact: 10.29.1 + '@preact/signals-core': 1.14.4 + preact: 10.29.7 '@prefresh/babel-plugin@0.5.3': {} - '@prefresh/core@1.5.9(preact@10.29.1)': + '@prefresh/core@1.5.9(preact@10.29.7)': dependencies: - preact: 10.29.1 + preact: 10.29.7 '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.12(preact@10.29.1)(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1))': + '@prefresh/vite@2.4.12(preact@10.29.7)(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0))': dependencies: '@babel/core': 8.0.1 '@prefresh/babel-plugin': 0.5.3 - '@prefresh/core': 1.5.9(preact@10.29.1) + '@prefresh/core': 1.5.9(preact@10.29.7) '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 - preact: 10.29.1 - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) + preact: 10.29.7 + vite: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) '@react-dnd/asap@4.0.1': {} @@ -4829,53 +4259,53 @@ snapshots: '@resvg/resvg-js-win32-ia32-msvc': 2.6.2 '@resvg/resvg-js-win32-x64-msvc': 2.6.2 - '@rolldown/binding-android-arm64@1.0.3': + '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.0.3': + '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.0.3': + '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.0.3': + '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.3': + '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.3': + '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.3': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.3': + '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.3': + '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.0.3': + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.0.3': + '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-wasm32-wasi@1.0.3': + '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.3': + '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.3': + '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -4968,46 +4398,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.4': optional: true - '@shikijs/core@2.5.0': - dependencies: - '@shikijs/engine-javascript': 2.5.0 - '@shikijs/engine-oniguruma': 2.5.0 - '@shikijs/types': 2.5.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@2.5.0': - dependencies: - '@shikijs/types': 2.5.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 3.1.1 - - '@shikijs/engine-oniguruma@2.5.0': - dependencies: - '@shikijs/types': 2.5.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@2.5.0': - dependencies: - '@shikijs/types': 2.5.0 - - '@shikijs/themes@2.5.0': - dependencies: - '@shikijs/types': 2.5.0 - - '@shikijs/transformers@2.5.0': - dependencies: - '@shikijs/core': 2.5.0 - '@shikijs/types': 2.5.0 - - '@shikijs/types@2.5.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - '@sindresorhus/is@4.6.0': {} '@standard-schema/spec@1.1.0': {} @@ -5016,108 +4406,103 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.2.2': + '@tailwindcss/node@4.3.3': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.1 - jiti: 2.6.1 + enhanced-resolve: 5.24.2 + jiti: 2.7.0 lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.2.2 + tailwindcss: 4.3.3 - '@tailwindcss/oxide-android-arm64@4.2.2': + '@tailwindcss/oxide-android-arm64@4.3.3': optional: true - '@tailwindcss/oxide-darwin-arm64@4.2.2': + '@tailwindcss/oxide-darwin-arm64@4.3.3': optional: true - '@tailwindcss/oxide-darwin-x64@4.2.2': + '@tailwindcss/oxide-darwin-x64@4.3.3': optional: true - '@tailwindcss/oxide-freebsd-x64@4.2.2': + '@tailwindcss/oxide-freebsd-x64@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.2': + '@tailwindcss/oxide-linux-x64-musl@4.3.3': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.2': + '@tailwindcss/oxide-wasm32-wasi@4.3.3': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': optional: true - '@tailwindcss/oxide@4.2.2': + '@tailwindcss/oxide@4.3.3': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-x64': 4.2.2 - '@tailwindcss/oxide-freebsd-x64': 4.2.2 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.2.2)': + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/typography@0.5.20(tailwindcss@4.3.3)': dependencies: postcss-selector-parser: 6.0.10 - tailwindcss: 4.2.2 + tailwindcss: 4.3.3 - '@tailwindcss/vite@4.2.2(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1))': + '@tailwindcss/vite@4.3.3(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0))': dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + tailwindcss: 4.3.3 + vite: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) - '@tanstack/history@1.161.4': {} + '@tanstack/history@1.162.0': {} - '@tanstack/react-router@1.166.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/history': 1.161.4 - '@tanstack/react-store': 0.9.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tanstack/router-core': 1.166.2 + '@tanstack/history': 1.162.0 + '@tanstack/react-store': 0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-core': 1.171.15 isbot: 5.1.39 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@tanstack/react-store@0.9.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@tanstack/react-store@0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@tanstack/store': 0.9.3 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - use-sync-external-store: 1.6.0(react@19.2.5) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + use-sync-external-store: 1.6.0(react@19.2.7) - '@tanstack/router-core@1.166.2': + '@tanstack/router-core@1.171.15': dependencies: - '@tanstack/history': 1.161.4 - '@tanstack/store': 0.9.3 - cookie-es: 2.0.1 - seroval: 1.5.2 - seroval-plugins: 1.5.2(seroval@1.5.2) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 + '@tanstack/history': 1.162.0 + cookie-es: 3.1.1 + seroval: 1.5.5 + seroval-plugins: 1.5.5(seroval@1.5.5) '@tanstack/store@0.9.3': {} @@ -5141,10 +4526,10 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/preact@3.2.4(preact@10.29.1)': + '@testing-library/preact@3.2.4(preact@10.29.7)': dependencies: '@testing-library/dom': 8.20.1 - preact: 10.29.1 + preact: 10.29.7 '@testing-library/user-event@14.6.1(@testing-library/dom@8.20.1)': dependencies: @@ -5160,7 +4545,7 @@ snapshots: '@tweenjs/tween.js@23.1.3': {} - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true @@ -5170,13 +4555,13 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.6.0 + '@types/node': 26.1.1 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.2.0 '@types/keyv': 3.1.4 - '@types/node': 25.6.0 + '@types/node': 22.20.1 '@types/responselike': 1.0.3 '@types/chai@5.2.3': @@ -5186,7 +4571,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.1.1 '@types/cookiejar@2.1.5': {} @@ -5202,7 +4587,7 @@ snapshots: '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.1.1 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -5215,14 +4600,10 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 25.6.0 + '@types/node': 22.20.1 '@types/gensync@1.0.5': {} - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - '@types/http-cache-semantics@4.2.0': {} '@types/http-errors@2.0.5': {} @@ -5231,26 +4612,13 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 25.6.0 - - '@types/linkify-it@5.0.0': {} - - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdurl@2.0.0': {} + '@types/node': 22.20.1 '@types/methods@1.1.4': {} '@types/ms@2.1.0': {} - '@types/multer@2.1.0': + '@types/multer@2.2.0': dependencies: '@types/express': 5.0.6 @@ -5258,19 +4626,17 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@22.20.1': + dependencies: + undici-types: 6.21.0 + '@types/node@24.12.4': dependencies: undici-types: 7.16.0 - '@types/node@25.6.0': + '@types/node@26.1.1': dependencies: - undici-types: 7.19.2 - - '@types/plist@3.0.5': - dependencies: - '@types/node': 25.6.0 - xmlbuilder: 15.1.1 - optional: true + undici-types: 8.3.0 '@types/qs@6.15.0': {} @@ -5278,16 +4644,16 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 25.6.0 + '@types/node': 22.20.1 '@types/send@1.2.1': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.1.1 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.6.0 + '@types/node': 26.1.1 '@types/stats.js@0.17.4': {} @@ -5295,58 +4661,38 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 25.6.0 + '@types/node': 26.1.1 form-data: 4.0.6 - '@types/supertest@7.2.0': + '@types/supertest@7.2.1': dependencies: '@types/methods': 1.1.4 '@types/superagent': 8.1.9 - '@types/three@0.183.1': + '@types/three@0.185.1': dependencies: '@dimforge/rapier3d-compat': 0.12.0 '@tweenjs/tween.js': 23.1.3 '@types/stats.js': 0.17.4 '@types/webxr': 0.5.24 - '@webgpu/types': 0.1.69 fflate: 0.8.2 - meshoptimizer: 1.0.1 + meshoptimizer: 1.1.1 '@types/trusted-types@2.0.7': optional: true - '@types/unist@3.0.3': {} - - '@types/verror@1.10.11': - optional: true - - '@types/web-bluetooth@0.0.21': {} - '@types/webxr@0.5.24': {} '@types/whatwg-mimetype@3.0.2': {} '@types/ws@8.18.1': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.1.1 - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 25.6.0 - optional: true - - '@ungap/structured-clone@1.3.1': {} - - '@vitejs/plugin-vue@5.2.4(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1))(vue@3.5.35(typescript@5.9.3))': - dependencies: - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) - vue: 3.5.35(typescript@5.9.3) - - '@vitest/coverage-v8@4.1.4(vitest@4.1.4)': + '@vitest/coverage-v8@4.1.10(vitest@4.1.10)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.10 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -5355,155 +4701,52 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(happy-dom@20.9.0)(jsdom@29.0.2(@noble/hashes@1.8.0))(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) + vitest: 4.1.10(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(happy-dom@20.10.6)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) - '@vitest/expect@4.1.4': + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1))': + '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0))': dependencies: - '@vitest/spy': 4.1.4 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) + vite: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) - '@vitest/pretty-format@4.1.4': + '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.4': + '@vitest/runner@4.1.10': dependencies: - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.10 pathe: 2.0.3 - '@vitest/snapshot@4.1.4': + '@vitest/snapshot@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.4': {} + '@vitest/spy@4.1.10': {} - '@vitest/utils@4.1.4': + '@vitest/utils@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.4 + '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@vue/compiler-core@3.5.35': - dependencies: - '@babel/parser': 7.29.7 - '@vue/shared': 3.5.35 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.35': - dependencies: - '@vue/compiler-core': 3.5.35 - '@vue/shared': 3.5.35 - - '@vue/compiler-sfc@3.5.35': - dependencies: - '@babel/parser': 7.29.7 - '@vue/compiler-core': 3.5.35 - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.15 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.35': - dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/shared': 3.5.35 - - '@vue/devtools-api@7.7.9': - dependencies: - '@vue/devtools-kit': 7.7.9 - - '@vue/devtools-kit@7.7.9': - dependencies: - '@vue/devtools-shared': 7.7.9 - birpc: 2.9.0 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 1.0.0 - speakingurl: 14.0.1 - superjson: 2.2.6 - - '@vue/devtools-shared@7.7.9': - dependencies: - rfdc: 1.4.1 - - '@vue/reactivity@3.5.35': - dependencies: - '@vue/shared': 3.5.35 - - '@vue/runtime-core@3.5.35': - dependencies: - '@vue/reactivity': 3.5.35 - '@vue/shared': 3.5.35 - - '@vue/runtime-dom@3.5.35': - dependencies: - '@vue/reactivity': 3.5.35 - '@vue/runtime-core': 3.5.35 - '@vue/shared': 3.5.35 - csstype: 3.2.3 - - '@vue/server-renderer@3.5.35(vue@3.5.35(typescript@5.9.3))': - dependencies: - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - vue: 3.5.35(typescript@5.9.3) - - '@vue/shared@3.5.35': {} - - '@vueuse/core@12.8.2(typescript@5.9.3)': - dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 12.8.2 - '@vueuse/shared': 12.8.2(typescript@5.9.3) - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - typescript - - '@vueuse/integrations@12.8.2(axios@1.16.0)(focus-trap@7.8.0)(typescript@5.9.3)': - dependencies: - '@vueuse/core': 12.8.2(typescript@5.9.3) - '@vueuse/shared': 12.8.2(typescript@5.9.3) - vue: 3.5.35(typescript@5.9.3) - optionalDependencies: - axios: 1.16.0 - focus-trap: 7.8.0 - transitivePeerDependencies: - - typescript - - '@vueuse/metadata@12.8.2': {} - - '@vueuse/shared@12.8.2(typescript@5.9.3)': - dependencies: - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - typescript - - '@webgpu/types@0.1.69': {} - '@xmldom/xmldom@0.8.13': {} - '@xmldom/xmldom@0.9.10': - optional: true + '@xmldom/xmldom@0.9.10': {} abbrev@4.0.0: {} @@ -5520,47 +4763,25 @@ snapshots: adm-zip@0.5.17: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + agent-base@7.1.4: {} - ajv-formats@3.0.1(ajv@8.18.0): + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 - - ajv-keywords@3.5.2(ajv@6.15.0): - dependencies: - ajv: 6.15.0 - - ajv@6.15.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 + ajv: 8.20.0 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.52.1: - dependencies: - '@algolia/abtesting': 1.18.1 - '@algolia/client-abtesting': 5.52.1 - '@algolia/client-analytics': 5.52.1 - '@algolia/client-common': 5.52.1 - '@algolia/client-insights': 5.52.1 - '@algolia/client-personalization': 5.52.1 - '@algolia/client-query-suggestions': 5.52.1 - '@algolia/client-search': 5.52.1 - '@algolia/ingestion': 1.52.1 - '@algolia/monitoring': 1.52.1 - '@algolia/recommend': 5.52.1 - '@algolia/requester-browser-xhr': 5.52.1 - '@algolia/requester-fetch': 5.52.1 - '@algolia/requester-node-http': 5.52.1 - ansi-regex@5.0.1: {} ansi-styles@4.3.0: @@ -5569,11 +4790,8 @@ snapshots: ansi-styles@5.2.0: {} - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1): + app-builder-lib@26.15.6(dmg-builder@26.15.6)(electron-builder-squirrel-windows@26.15.6): dependencies: - '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 '@electron/fuses': 1.8.0 '@electron/get': 3.1.0 @@ -5582,27 +4800,32 @@ snapshots: '@electron/rebuild': 4.0.4 '@electron/universal': 2.0.3 '@malept/flatpak-bundler': 0.4.0 + '@noble/hashes': 2.2.0 + '@peculiar/webcrypto': 1.7.1 '@types/fs-extra': 9.0.13 + ajv: 8.20.0 + asn1js: 3.0.10 async-exit-hook: 2.0.1 - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3 - dmg-builder: 26.8.1(electron-builder-squirrel-windows@26.8.1) + dmg-builder: 26.15.6(electron-builder-squirrel-windows@26.15.6) dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.8.1(dmg-builder@26.8.1) - electron-publish: 26.8.1 + electron-builder-squirrel-windows: 26.15.6(dmg-builder@26.15.6) + electron-publish: 26.15.3 fs-extra: 10.1.0 hosted-git-info: 4.1.0 isbinaryfile: 5.0.7 - jiti: 2.6.1 + jiti: 2.7.0 js-yaml: 4.2.0 json5: 2.2.3 lazy-val: 1.0.5 minimatch: 10.2.5 + pkijs: 3.4.0 plist: 3.1.0 proper-lockfile: 4.1.2 resedit: 1.7.2 @@ -5610,6 +4833,7 @@ snapshots: tar: 7.5.16 temp-file: 3.4.0 tiny-async-pool: 1.3.0 + unzipper: 0.12.5 which: 5.0.0 transitivePeerDependencies: - supports-color @@ -5637,8 +4861,11 @@ snapshots: asap@2.0.6: {} - assert-plus@1.0.0: - optional: true + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 assertion-error@2.0.1: {} @@ -5648,9 +4875,6 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 - astral-regex@2.0.0: - optional: true - async-exit-hook@2.0.1: {} async@3.2.6: {} @@ -5663,13 +4887,17 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios@1.16.0: + aws4@1.13.2: {} + + axios@1.18.1: dependencies: follow-redirects: 1.16.0 form-data: 4.0.6 + https-proxy-agent: 5.0.1 proxy-from-env: 2.1.0 transitivePeerDependencies: - debug + - supports-color babel-plugin-transform-hook-names@1.0.2(@babel/core@8.0.1): dependencies: @@ -5687,10 +4915,10 @@ snapshots: dependencies: require-from-string: 2.0.2 - birpc@2.9.0: {} - bluebird@3.4.7: {} + bluebird@3.7.2: {} + body-parser@2.2.2: dependencies: bytes: 3.1.2 @@ -5699,7 +4927,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.15.2 + qs: 6.15.3 raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: @@ -5707,7 +4935,8 @@ snapshots: boolbase@1.0.0: {} - boolean@3.2.0: {} + boolean@3.2.0: + optional: true brace-expansion@1.1.15: dependencies: @@ -5730,29 +4959,23 @@ snapshots: node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) - buffer-crc32@0.2.13: {} - buffer-from@1.1.2: {} - buffer@5.7.1: + buffer-image-size@0.6.4: dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - optional: true + '@types/node': 26.1.1 - builder-util-runtime@9.5.1: + builder-util-runtime@9.7.0: dependencies: debug: 4.4.3 sax: 1.6.0 transitivePeerDependencies: - supports-color - builder-util@26.8.1: + builder-util@26.15.3: dependencies: - 7zip-bin: 5.2.0 '@types/debug': 4.1.13 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 + builder-util-runtime: 9.7.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 @@ -5774,6 +4997,8 @@ snapshots: bytes@3.1.2: {} + bytestreamjs@2.0.1: {} + cacheable-lookup@5.0.4: {} cacheable-request@7.0.4: @@ -5805,8 +5030,6 @@ snapshots: caniuse-lite@1.0.30001788: {} - ccount@2.0.1: {} - chai@6.2.2: {} chalk@4.1.2: @@ -5814,10 +5037,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - chownr@3.0.0: {} chromium-pickle-js@0.2.0: {} @@ -5826,12 +5045,6 @@ snapshots: ci-info@4.4.0: {} - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -5854,8 +5067,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - comma-separated-tokens@2.0.3: {} - commander@5.1.0: {} commander@9.5.0: @@ -5880,7 +5091,7 @@ snapshots: convert-source-map@2.0.0: {} - cookie-es@2.0.1: {} + cookie-es@3.1.1: {} cookie-signature@1.2.2: {} @@ -5888,10 +5099,6 @@ snapshots: cookiejar@2.1.4: {} - copy-anything@4.0.5: - dependencies: - is-what: 5.5.0 - core-util-is@1.0.2: {} cors@2.8.6: @@ -5899,11 +5106,6 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - create-require@1.1.1: {} cross-dirname@0.1.0: @@ -5934,12 +5136,10 @@ snapshots: cssesc@3.0.0: {} - csstype@3.2.3: {} - - data-urls@7.0.0(@noble/hashes@1.8.0): + data-urls@7.0.0(@noble/hashes@2.2.0): dependencies: whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1(@noble/hashes@1.8.0) + whatwg-url: 16.0.1(@noble/hashes@2.2.0) transitivePeerDependencies: - '@noble/hashes' @@ -5969,7 +5169,7 @@ snapshots: object-keys: 1.1.1 object.assign: 4.1.7 regexp.prototype.flags: 1.5.4 - side-channel: 1.1.0 + side-channel: 1.1.1 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 which-typed-array: 1.1.20 @@ -5992,15 +5192,10 @@ snapshots: depd@2.0.0: {} - dequal@2.0.3: {} - detect-libc@2.1.2: {} - detect-node@2.1.0: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 + detect-node@2.1.0: + optional: true dezalgo@1.0.4: dependencies: @@ -6016,31 +5211,16 @@ snapshots: minimatch: 3.1.5 p-limit: 3.1.0 - dmg-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): + dmg-builder@26.15.6(electron-builder-squirrel-windows@26.15.6): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) - builder-util: 26.8.1 + app-builder-lib: 26.15.6(dmg-builder@26.15.6)(electron-builder-squirrel-windows@26.15.6) + builder-util: 26.15.3 fs-extra: 10.1.0 - iconv-lite: 0.6.3 js-yaml: 4.2.0 - optionalDependencies: - dmg-license: 1.0.11 transitivePeerDependencies: - electron-builder-squirrel-windows - supports-color - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.15.0 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.1 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - dnd-core@14.0.1: dependencies: '@react-dnd/asap': 4.0.1 @@ -6091,29 +5271,33 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + ee-first@1.1.1: {} ejs@3.1.10: dependencies: jake: 10.9.4 - electron-builder-squirrel-windows@26.8.1(dmg-builder@26.8.1): + electron-builder-squirrel-windows@26.15.6(dmg-builder@26.15.6): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) - builder-util: 26.8.1 + app-builder-lib: 26.15.6(dmg-builder@26.15.6)(electron-builder-squirrel-windows@26.15.6) + builder-util: 26.15.3 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): + electron-builder@26.15.6(electron-builder-squirrel-windows@26.15.6): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + app-builder-lib: 26.15.6(dmg-builder@26.15.6)(electron-builder-squirrel-windows@26.15.6) + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 26.8.1(electron-builder-squirrel-windows@26.8.1) + dmg-builder: 26.15.6(electron-builder-squirrel-windows@26.15.6) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -6122,11 +5306,12 @@ snapshots: - electron-builder-squirrel-windows - supports-color - electron-publish@26.8.1: + electron-publish@26.15.3: dependencies: '@types/fs-extra': 9.0.13 - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + aws4: 1.13.2 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chalk: 4.1.2 form-data: 4.0.6 fs-extra: 10.1.0 @@ -6149,16 +5334,14 @@ snapshots: transitivePeerDependencies: - supports-color - electron@42.3.0: + electron@43.1.1: dependencies: + '@electron-internal/extract-zip': 1.0.4 '@electron/get': 5.0.0 '@types/node': 24.12.4 - extract-zip: 2.0.1 transitivePeerDependencies: - supports-color - emoji-regex-xs@1.0.0: {} - emoji-regex@8.0.0: {} empathic@2.0.1: {} @@ -6169,17 +5352,17 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.20.1: + enhanced-resolve@5.24.2: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.2 + tapable: 2.3.3 entities@4.5.0: {} - entities@6.0.1: {} - entities@7.0.1: {} + entities@8.0.0: {} + env-paths@2.2.1: {} env-paths@3.0.0: {} @@ -6215,7 +5398,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 - es6-error@4.1.1: {} + es6-error@4.1.1: + optional: true escalade@3.2.0: {} @@ -6241,7 +5425,7 @@ snapshots: exponential-backoff@3.1.3: {} - express-rate-limit@8.3.2(express@5.2.1): + express-rate-limit@8.5.2(express@5.2.1): dependencies: express: 5.2.1 ip-address: 10.2.0 @@ -6268,7 +5452,7 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.15.2 + qs: 6.15.3 range-parser: 1.2.1 router: 2.2.0 send: 1.2.1 @@ -6279,31 +5463,12 @@ snapshots: transitivePeerDependencies: - supports-color - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - extsprintf@1.4.1: - optional: true - fast-deep-equal@3.1.3: {} - fast-json-stable-stringify@2.1.0: {} - fast-safe-stringify@2.1.1: {} fast-uri@3.1.2: {} - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -6325,10 +5490,6 @@ snapshots: transitivePeerDependencies: - supports-color - focus-trap@7.8.0: - dependencies: - tabbable: 6.4.0 - follow-redirects@1.16.0: {} for-each@0.3.5: @@ -6359,6 +5520,12 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 + fs-extra@11.3.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + fs-extra@11.3.5: dependencies: graceful-fs: 4.2.11 @@ -6439,6 +5606,14 @@ snapshots: roarr: 2.15.4 semver: 7.7.4 serialize-error: 7.0.1 + optional: true + + global-agent@4.1.3: + dependencies: + globalthis: 1.0.4 + matcher: 4.0.0 + semver: 7.7.4 + serialize-error: 8.1.0 globalthis@1.0.4: dependencies: @@ -6465,14 +5640,15 @@ snapshots: gsap@3.15.0: {} - happy-dom@20.9.0: + happy-dom@20.10.6: dependencies: - '@types/node': 25.6.0 + '@types/node': 26.1.1 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 entities: 7.0.1 whatwg-mimetype: 3.0.0 - ws: 8.21.0 + ws: 8.21.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -6491,32 +5667,10 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.3: - dependencies: - function-bind: 1.1.2 - hasown@2.0.4: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - he@1.2.0: {} hoist-non-react-statics@3.3.2: @@ -6525,22 +5679,18 @@ snapshots: hono@4.12.26: {} - hookable@5.5.3: {} - hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 - html-encoding-sniffer@6.0.0(@noble/hashes@1.8.0): + html-encoding-sniffer@6.0.0(@noble/hashes@2.2.0): dependencies: - '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + '@exodus/bytes': 1.15.0(@noble/hashes@2.2.0) transitivePeerDependencies: - '@noble/hashes' html-escaper@2.0.2: {} - html-void-elements@3.0.0: {} - http-cache-semantics@4.2.0: {} http-errors@2.0.1: @@ -6563,30 +5713,24 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@7.0.6: + https-proxy-agent@5.0.1: dependencies: - agent-base: 7.1.4 + agent-base: 6.0.2 debug: 4.4.3 transitivePeerDependencies: - supports-color - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.6.3: + https-proxy-agent@7.0.6: dependencies: - safer-buffer: 2.1.2 + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: - optional: true - immediate@3.0.6: {} import-meta-resolve@4.2.0: {} @@ -6603,8 +5747,8 @@ snapshots: internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.3 - side-channel: 1.1.0 + hasown: 2.0.4 + side-channel: 1.1.1 ip-address@10.2.0: {} @@ -6655,7 +5799,7 @@ snapshots: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.3 + hasown: 2.0.4 is-set@2.0.3: {} @@ -6681,8 +5825,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-what@5.5.0: {} - isarray@1.0.0: {} isarray@2.0.5: {} @@ -6718,7 +5860,7 @@ snapshots: filelist: 1.0.6 picocolors: 1.1.1 - jiti@2.6.1: {} + jiti@2.7.0: {} jose@6.2.2: {} @@ -6734,20 +5876,20 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@29.0.2(@noble/hashes@1.8.0): + jsdom@29.1.1(@noble/hashes@2.2.0): dependencies: '@asamuzakjp/css-color': 5.1.11 - '@asamuzakjp/dom-selector': 7.0.10 + '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) - '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + '@exodus/bytes': 1.15.0(@noble/hashes@2.2.0) css-tree: 3.2.1 - data-urls: 7.0.0(@noble/hashes@1.8.0) + data-urls: 7.0.0(@noble/hashes@2.2.0) decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0(@noble/hashes@1.8.0) + html-encoding-sniffer: 6.0.0(@noble/hashes@2.2.0) is-potential-custom-element-name: 1.0.1 lru-cache: 11.3.5 - parse5: 8.0.0 + parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 @@ -6755,7 +5897,7 @@ snapshots: w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1(@noble/hashes@1.8.0) + whatwg-url: 16.0.1(@noble/hashes@2.2.0) xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' @@ -6764,13 +5906,12 @@ snapshots: json-buffer@3.0.1: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} - json-stringify-safe@5.0.1: {} + json-stringify-safe@5.0.1: + optional: true json5@2.2.3: {} @@ -6868,13 +6009,13 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-preact@0.577.0(preact@10.29.1): + lucide-preact@1.24.0(preact@10.29.7): dependencies: - preact: 10.29.1 + preact: 10.29.7 - lucide-react@1.8.0(react@19.2.5): + lucide-react@1.24.0(react@19.2.7): dependencies: - react: 19.2.5 + react: 19.2.7 lz-string@1.5.0: {} @@ -6884,8 +6025,8 @@ snapshots: magicast@0.5.2: dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 make-dir@4.0.0: @@ -6907,29 +6048,20 @@ snapshots: underscore: 1.13.8 xmlbuilder: 10.1.1 - mark.js@8.11.1: {} - marked@14.0.0: {} - marked@17.0.6: {} + marked@18.0.6: {} matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 + optional: true - math-intrinsics@1.1.0: {} - - mdast-util-to-hast@13.2.1: + matcher@4.0.0: dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.1 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 + escape-string-regexp: 4.0.0 + + math-intrinsics@1.1.0: {} mdn-data@2.27.1: {} @@ -6941,27 +6073,10 @@ snapshots: merge-descriptors@2.0.0: {} - meshoptimizer@1.0.1: {} + meshoptimizer@1.1.1: {} methods@1.1.2: {} - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-encode@2.0.1: {} - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - mime-db@1.52.0: {} mime-db@1.54.0: {} @@ -7002,14 +6117,10 @@ snapshots: minipass@7.1.3: {} - minisearch@7.2.0: {} - minizlib@3.1.0: dependencies: minipass: 7.1.3 - mitt@3.0.1: {} - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -7036,9 +6147,6 @@ snapshots: dependencies: semver: 7.7.4 - node-addon-api@1.7.2: - optional: true - node-api-version@0.2.1: dependencies: semver: 7.7.4 @@ -7052,7 +6160,7 @@ snapshots: proc-log: 6.1.0 semver: 7.7.4 tar: 7.5.16 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 undici: 6.27.0 which: 6.0.1 @@ -7061,6 +6169,8 @@ snapshots: css-select: 5.2.2 he: 1.2.0 + node-int64@0.4.0: {} + node-releases@2.0.37: {} nopt@9.0.0: @@ -7103,19 +6213,13 @@ snapshots: dependencies: wrappy: 1.0.2 - oniguruma-to-es@3.1.1: - dependencies: - emoji-regex-xs: 1.0.0 - regex: 6.1.0 - regex-recursion: 6.0.2 - - onnxruntime-common@1.24.3: {} + onnxruntime-common@1.27.0: {} - onnxruntime-node@1.24.3: + onnxruntime-node@1.27.0: dependencies: adm-zip: 0.5.17 - global-agent: 3.0.0 - onnxruntime-common: 1.24.3 + global-agent: 4.1.3 + onnxruntime-common: 1.27.0 option@0.2.4: {} @@ -7131,9 +6235,9 @@ snapshots: pako@1.0.11: {} - parse5@8.0.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.0.0 parseurl@1.3.3: {} @@ -7156,23 +6260,30 @@ snapshots: pe-library@0.4.1: {} - pend@1.2.0: {} - - perfect-debounce@1.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} picomatch@4.0.4: {} + picomatch@4.0.5: {} + pkce-challenge@5.0.1: {} - playwright-core@1.60.0: {} + pkijs@3.4.0: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.10 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 - playwright@1.60.0: + playwright-core@1.61.1: {} + + playwright@1.61.1: dependencies: - playwright-core: 1.60.0 + playwright-core: 1.61.1 optionalDependencies: fsevents: 2.3.2 @@ -7187,7 +6298,6 @@ snapshots: '@xmldom/xmldom': 0.9.10 base64-js: 1.5.1 xmlbuilder: 15.1.1 - optional: true possible-typed-array-names@1.1.0: {} @@ -7196,7 +6306,7 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.15: + postcss@8.5.19: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -7207,7 +6317,7 @@ snapshots: commander: 9.5.0 optional: true - preact@10.29.1: {} + preact@10.29.7: {} pretty-format@27.5.1: dependencies: @@ -7232,8 +6342,6 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 - property-information@7.1.0: {} - proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -7248,9 +6356,16 @@ snapshots: punycode@2.3.1: {} - qs@6.15.2: + pvtsutils@1.3.6: dependencies: - side-channel: 1.1.0 + tslib: 2.8.1 + + pvutils@1.1.5: {} + + qs@6.15.3: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 quick-lru@5.1.1: {} @@ -7263,15 +6378,15 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - react-arborist@3.8.0(@types/node@25.6.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-arborist@3.13.2(@types/node@22.20.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - react: 19.2.5 - react-dnd: 14.0.5(@types/node@25.6.0)(react@19.2.5) + react: 19.2.7 + react-dnd: 14.0.5(@types/node@22.20.1)(react@19.2.7) react-dnd-html5-backend: 14.1.0 - react-dom: 19.2.5(react@19.2.5) - react-window: 1.8.11(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-dom: 19.2.7(react@19.2.7) + react-window: 1.8.11(react-dom@19.2.7(react@19.2.7))(react@19.2.7) redux: 5.0.1 - use-sync-external-store: 1.6.0(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.7) transitivePeerDependencies: - '@types/hoist-non-react-statics' - '@types/node' @@ -7281,36 +6396,36 @@ snapshots: dependencies: dnd-core: 14.0.1 - react-dnd@14.0.5(@types/node@25.6.0)(react@19.2.5): + react-dnd@14.0.5(@types/node@22.20.1)(react@19.2.7): dependencies: '@react-dnd/invariant': 2.0.0 '@react-dnd/shallowequal': 2.0.0 dnd-core: 14.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 - react: 19.2.5 + react: 19.2.7 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 22.20.1 - react-dom@19.2.5(react@19.2.5): + react-dom@19.2.7(react@19.2.7): dependencies: - react: 19.2.5 + react: 19.2.7 scheduler: 0.27.0 react-is@16.13.1: {} react-is@17.0.2: {} - react-is@19.2.5: {} + react-is@19.2.7: {} - react-window@1.8.11(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-window@1.8.11(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@babel/runtime': 7.29.2 memoize-one: 5.2.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - react@19.2.5: {} + react@19.2.7: {} read-binary-file-arch@1.0.6: dependencies: @@ -7345,16 +6460,6 @@ snapshots: redux@5.0.1: {} - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.1.0: - dependencies: - regex-utilities: 2.3.0 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.9 @@ -7380,8 +6485,6 @@ snapshots: retry@0.12.0: {} - rfdc@1.4.1: {} - rimraf@2.6.3: dependencies: glob: 7.2.3 @@ -7394,27 +6497,28 @@ snapshots: json-stringify-safe: 5.0.1 semver-compare: 1.0.0 sprintf-js: 1.1.3 + optional: true - rolldown@1.0.3: + rolldown@1.1.5: dependencies: - '@oxc-project/types': 0.133.0 + '@oxc-project/types': 0.139.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.3 - '@rolldown/binding-darwin-arm64': 1.0.3 - '@rolldown/binding-darwin-x64': 1.0.3 - '@rolldown/binding-freebsd-x64': 1.0.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 - '@rolldown/binding-linux-arm64-gnu': 1.0.3 - '@rolldown/binding-linux-arm64-musl': 1.0.3 - '@rolldown/binding-linux-ppc64-gnu': 1.0.3 - '@rolldown/binding-linux-s390x-gnu': 1.0.3 - '@rolldown/binding-linux-x64-gnu': 1.0.3 - '@rolldown/binding-linux-x64-musl': 1.0.3 - '@rolldown/binding-openharmony-arm64': 1.0.3 - '@rolldown/binding-wasm32-wasi': 1.0.3 - '@rolldown/binding-win32-arm64-msvc': 1.0.3 - '@rolldown/binding-win32-x64-msvc': 1.0.3 + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 rollup@4.60.4: dependencies: @@ -7482,9 +6586,8 @@ snapshots: scheduler@0.27.0: {} - search-insights@2.17.3: {} - - semver-compare@1.0.0: {} + semver-compare@1.0.0: + optional: true semver@5.7.2: {} @@ -7511,12 +6614,17 @@ snapshots: serialize-error@7.0.1: dependencies: type-fest: 0.13.1 + optional: true + + serialize-error@8.1.0: + dependencies: + type-fest: 0.20.2 - seroval-plugins@1.5.2(seroval@1.5.2): + seroval-plugins@1.5.5(seroval@1.5.5): dependencies: - seroval: 1.5.2 + seroval: 1.5.5 - seroval@1.5.2: {} + seroval@1.5.5: {} serve-static@2.2.1: dependencies: @@ -7553,17 +6661,6 @@ snapshots: shebang-regex@3.0.0: {} - shiki@2.5.0: - dependencies: - '@shikijs/core': 2.5.0 - '@shikijs/engine-javascript': 2.5.0 - '@shikijs/engine-oniguruma': 2.5.0 - '@shikijs/langs': 2.5.0 - '@shikijs/themes': 2.5.0 - '@shikijs/types': 2.5.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -7584,7 +6681,7 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.1.0: + side-channel@1.1.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -7604,16 +6701,6 @@ snapshots: dependencies: semver: 7.7.4 - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: - optional: true - source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -7625,13 +6712,10 @@ snapshots: source-map@0.7.6: {} - space-separated-tokens@2.0.2: {} - - speakingurl@14.0.1: {} - sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} + sprintf-js@1.1.3: + optional: true stack-trace@1.0.0-pre2: {} @@ -7666,11 +6750,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -7695,14 +6774,10 @@ snapshots: formidable: 3.5.4 methods: 1.1.2 mime: 2.6.0 - qs: 6.15.2 + qs: 6.15.3 transitivePeerDependencies: - supports-color - superjson@2.2.6: - dependencies: - copy-anything: 4.0.5 - supertest@7.2.2: dependencies: cookie-signature: 1.2.2 @@ -7717,11 +6792,9 @@ snapshots: symbol-tree@3.2.4: {} - tabbable@6.4.0: {} - - tailwindcss@4.2.2: {} + tailwindcss@4.3.3: {} - tapable@2.3.2: {} + tapable@2.3.3: {} tar@7.5.16: dependencies: @@ -7741,7 +6814,7 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.6.3 - three@0.183.2: {} + three@0.185.1: {} tiktoken@1.0.22: {} @@ -7749,19 +6822,10 @@ snapshots: dependencies: semver: 5.7.2 - tiny-invariant@1.3.3: {} - - tiny-warning@1.0.3: {} - tinybench@2.9.0: {} tinyexec@1.1.1: {} - tinyglobby@0.2.16: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -7791,20 +6855,18 @@ snapshots: dependencies: punycode: 2.3.1 - trim-lines@3.0.1: {} - truncate-utf8-bytes@1.0.2: dependencies: utf8-byte-length: 1.0.5 - ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.3): + ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 25.6.0 + '@types/node': 22.20.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -7815,10 +6877,12 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - tslib@2.8.1: + tslib@2.8.1: {} + + type-fest@0.13.1: optional: true - type-fest@0.13.1: {} + type-fest@0.20.2: {} type-is@1.6.18: dependencies: @@ -7839,9 +6903,11 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.21.0: {} + undici-types@7.16.0: {} - undici-types@7.19.2: {} + undici-types@8.3.0: {} undici@6.27.0: {} @@ -7850,48 +6916,29 @@ snapshots: undici@8.5.0: optional: true - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@5.1.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - universalify@0.1.2: {} universalify@2.0.1: {} unpipe@1.0.0: {} + unzipper@0.12.5: + dependencies: + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.1 + graceful-fs: 4.2.11 + node-int64: 0.4.0 + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - use-sync-external-store@1.6.0(react@19.2.5): + use-sync-external-store@1.6.0(react@19.2.7): dependencies: - react: 19.2.5 + react: 19.2.7 utf8-byte-length@1.0.5: {} @@ -7901,24 +6948,7 @@ snapshots: vary@1.1.2: {} - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - vite-prerender-plugin@0.5.13(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)): + vite-prerender-plugin@0.5.13(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -7926,82 +6956,29 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) + vite: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) - vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1): + vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.15 - rolldown: 1.0.3 + picomatch: 4.0.5 + postcss: 8.5.19 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 22.20.1 fsevents: 2.3.3 - jiti: 2.6.1 - - vitepress@1.6.4(@algolia/client-search@5.52.1)(@types/node@25.6.0)(axios@1.16.0)(jiti@2.6.1)(postcss@8.5.15)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@5.9.3): - dependencies: - '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.52.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3) - '@iconify-json/simple-icons': 1.2.84 - '@shikijs/core': 2.5.0 - '@shikijs/transformers': 2.5.0 - '@shikijs/types': 2.5.0 - '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1))(vue@3.5.35(typescript@5.9.3)) - '@vue/devtools-api': 7.7.9 - '@vue/shared': 3.5.35 - '@vueuse/core': 12.8.2(typescript@5.9.3) - '@vueuse/integrations': 12.8.2(axios@1.16.0)(focus-trap@7.8.0)(typescript@5.9.3) - focus-trap: 7.8.0 - mark.js: 8.11.1 - minisearch: 7.2.0 - shiki: 2.5.0 - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) - vue: 3.5.35(typescript@5.9.3) - optionalDependencies: - postcss: 8.5.15 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/node' - - '@types/react' - - '@vitejs/devtools' - - async-validator - - axios - - change-case - - drauu - - esbuild - - fuse.js - - idb-keyval - - jiti - - jwt-decode - - less - - nprogress - - qrcode - - react - - react-dom - - sass - - sass-embedded - - search-insights - - sortablejs - - stylus - - sugarss - - terser - - tsx - - typescript - - universal-cookie - - yaml - - vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(happy-dom@20.9.0)(jsdom@29.0.2(@noble/hashes@1.8.0))(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)): - dependencies: - '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.0.16(@types/node@25.6.0)(jiti@2.6.1)) - '@vitest/pretty-format': 4.1.4 - '@vitest/runner': 4.1.4 - '@vitest/snapshot': 4.1.4 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + jiti: 2.7.0 + + vitest@4.1.10(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(happy-dom@20.10.6)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@22.20.1)(jiti@2.7.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -8011,41 +6988,39 @@ snapshots: std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.1.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.0.16(@types/node@25.6.0)(jiti@2.6.1) + vite: 8.1.5(@types/node@22.20.1)(jiti@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.6.0 - '@vitest/coverage-v8': 4.1.4(vitest@4.1.4) - happy-dom: 20.9.0 - jsdom: 29.0.2(@noble/hashes@1.8.0) + '@types/node': 22.20.1 + '@vitest/coverage-v8': 4.1.10(vitest@4.1.10) + happy-dom: 20.10.6 + jsdom: 29.1.1(@noble/hashes@2.2.0) transitivePeerDependencies: - msw - vue@3.5.35(typescript@5.9.3): - dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-sfc': 3.5.35 - '@vue/runtime-dom': 3.5.35 - '@vue/server-renderer': 3.5.35(vue@3.5.35(typescript@5.9.3)) - '@vue/shared': 3.5.35 - optionalDependencies: - typescript: 5.9.3 - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 + webcrypto-core@1.9.2: + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + webidl-conversions@8.0.1: {} whatwg-mimetype@3.0.0: {} whatwg-mimetype@5.0.0: {} - whatwg-url@16.0.1(@noble/hashes@1.8.0): + whatwg-url@16.0.1(@noble/hashes@2.2.0): dependencies: - '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + '@exodus/bytes': 1.15.0(@noble/hashes@2.2.0) tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -8101,7 +7076,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.21.0: {} + ws@8.21.1: {} xml-name-validator@5.0.0: {} @@ -8129,11 +7104,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - yn@3.1.1: {} yocto-queue@0.1.0: {} @@ -8142,10 +7112,8 @@ snapshots: zimmerframe@1.1.4: {} - zod-to-json-schema@3.25.2(zod@4.3.6): + zod-to-json-schema@3.25.2(zod@4.4.3): dependencies: - zod: 4.3.6 - - zod@4.3.6: {} + zod: 4.4.3 - zwitch@2.0.4: {} + zod@4.4.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8e8a8c0ad2..dea003336f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,29 @@ allowBuilds: + electron-winstaller: false onnxruntime-node: true +minimumReleaseAge: 1440 +minimumReleaseAgeStrict: true + +minimumReleaseAgeExclude: + - '@tailwindcss/node@4.3.3' + - '@tailwindcss/oxide-android-arm64@4.3.3' + - '@tailwindcss/oxide-darwin-arm64@4.3.3' + - '@tailwindcss/oxide-darwin-x64@4.3.3' + - '@tailwindcss/oxide-freebsd-x64@4.3.3' + - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3' + - '@tailwindcss/oxide-linux-arm64-gnu@4.3.3' + - '@tailwindcss/oxide-linux-arm64-musl@4.3.3' + - '@tailwindcss/oxide-linux-x64-gnu@4.3.3' + - '@tailwindcss/oxide-linux-x64-musl@4.3.3' + - '@tailwindcss/oxide-wasm32-wasi@4.3.3' + - '@tailwindcss/oxide-win32-arm64-msvc@4.3.3' + - '@tailwindcss/oxide-win32-x64-msvc@4.3.3' + - '@tailwindcss/oxide@4.3.3' + - '@tailwindcss/vite@4.3.3' + - tailwindcss@4.3.3 + - vite@8.1.5 + overrides: '@babel/core@<=7.29.0': '>=7.29.6' "@rollup/pluginutils@4.2.1>picomatch": "2.3.2" @@ -18,22 +41,22 @@ overrides: dompurify@>=3.0.1 <3.4.0: '>=3.4.0' dompurify@>=3.1.3 <=3.3.1: '>=3.3.2' esbuild@<=0.24.2: '>=0.25.0' - express-rate-limit: "^8.3.2" + express-rate-limit: "^8.5.2" fast-uri: "^3.1.2" form-data@>=4.0.0 <4.0.6: '>=4.0.6' - hono: "^4.12.18" + hono: "^4.12.30" hono@<4.12.25: '>=4.12.25' - ip-address: "^10.1.1" + ip-address: "^10.2.0" js-yaml@<=4.1.1: '>=4.2.0' multer@>=1.0.0 <2.2.0: '>=2.2.0' multer@>=2.0.0-alpha.1 <2.2.0: '>=2.2.0' path-to-regexp: "^8.4.2" - qs: "^6.15.2" + qs: "^6.15.3" tar@<=7.5.15: '>=7.5.16' tmp@>=0.2.6 <0.2.7: '>=0.2.7' undici@>=7.23.0 <7.28.0: '7.28.0' vite@<=6.4.1: '>=6.4.2' vite@<=6.4.2: '>=6.4.3' vite@>=8.0.0 <=8.0.15: '>=8.0.16' - ws: "^8.20.1" + ws: "^8.21.1" '@electron/get>undici': '>=7.28.0' diff --git a/scripts/dashboard-i18n-allowlist.json b/scripts/dashboard-i18n-allowlist.json index 8310169d72..10c990cc88 100644 --- a/scripts/dashboard-i18n-allowlist.json +++ b/scripts/dashboard-i18n-allowlist.json @@ -101,7 +101,7 @@ }, { "path": "dashboard/src/v2/components/onboarding/OnboardingIntroductionStep.tsx", - "line": 89, + "line": 90, "kind": "jsx-expression", "text": "MIT License Copyright (c) 2026 Pierre Voss Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "rationale": "The verbatim MIT license is English legal documentation and must not be translated." @@ -423,77 +423,77 @@ }, { "path": "dashboard/src/v2/components/sprints/SprintImportMenu.tsx", - "line": 168, + "line": 169, "kind": "jsx-text", "text": "Markdown", "rationale": "This is a file format or external product name and remains unchanged across locales." }, { "path": "dashboard/src/v2/components/sprints/SprintImportMenu.tsx", - "line": 280, + "line": 281, "kind": "jsx-text", "text": "Asana", "rationale": "This is a file format or external product name and remains unchanged across locales." }, { "path": "dashboard/src/v2/components/sprints/SprintImportMenu.tsx", - "line": 302, + "line": 303, "kind": "jsx-text", "text": "Linear", "rationale": "This is a file format or external product name and remains unchanged across locales." }, { "path": "dashboard/src/v2/components/sprints/SprintImportMenu.tsx", - "line": 326, + "line": 327, "kind": "jsx-text", "text": "Miro", "rationale": "This is a file format or external product name and remains unchanged across locales." }, { "path": "dashboard/src/v2/components/sprints/SprintImportMenu.tsx", - "line": 348, + "line": 349, "kind": "jsx-text", "text": "Lucid", "rationale": "This is a file format or external product name and remains unchanged across locales." }, { "path": "dashboard/src/v2/components/sprints/SprintImportMenu.tsx", - "line": 392, + "line": 393, "kind": "jsx-text", "text": "Mural", "rationale": "This is a file format or external product name and remains unchanged across locales." }, { "path": "dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx", - "line": 637, + "line": 636, "kind": "attribute:placeholder", "text": "owner/repository", "rationale": "This is an example API filter, identifier, or user-authored import value and remains verbatim." }, { "path": "dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx", - "line": 732, + "line": 731, "kind": "attribute:placeholder", "text": "bug, security", "rationale": "This is an example API filter, identifier, or user-authored import value and remains verbatim." }, { "path": "dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx", - "line": 740, + "line": 739, "kind": "attribute:placeholder", "text": "me or alice", "rationale": "This is an example API filter, identifier, or user-authored import value and remains verbatim." }, { "path": "dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx", - "line": 749, + "line": 748, "kind": "attribute:placeholder", "text": "octocat", "rationale": "This is an example API filter, identifier, or user-authored import value and remains verbatim." }, { "path": "dashboard/src/v2/components/sprints/SprintIssueImportModal.tsx", - "line": 758, + "line": 757, "kind": "attribute:placeholder", "text": "v1.2", "rationale": "This is an example API filter, identifier, or user-authored import value and remains verbatim." diff --git a/scripts/prepare-electron-runtime-deps.mjs b/scripts/prepare-electron-runtime-deps.mjs index df5247d3ce..a5b0ee83c7 100644 --- a/scripts/prepare-electron-runtime-deps.mjs +++ b/scripts/prepare-electron-runtime-deps.mjs @@ -32,6 +32,7 @@ const runtimeImportProbe = [ "@modelcontextprotocol/sdk/server/index.js", "@modelcontextprotocol/sdk/types.js", "dotenv", + "onnxruntime-node", "zod", ]; diff --git a/scripts/smoke-installed-electron.mjs b/scripts/smoke-installed-electron.mjs index 9b1c349482..5719d40c69 100644 --- a/scripts/smoke-installed-electron.mjs +++ b/scripts/smoke-installed-electron.mjs @@ -18,9 +18,6 @@ const artifactDirectory = path.resolve( ); const timeoutMs = Number.parseInt(process.env.CODE_UX_ELECTRON_SMOKE_TIMEOUT_MS || "120000", 10); const packageJson = JSON.parse(await readFile(path.join(projectRoot, "package.json"), "utf8")); -const WINDOWS_ACCESS_VIOLATION = 0xC0000005; -const WINDOWS_INSTALL_RETRY_DELAYS_MS = [1_500, 5_000, 15_000]; -const WINDOWS_INSTALL_ATTEMPTS = WINDOWS_INSTALL_RETRY_DELAYS_MS.length + 1; const MAC_TERMINATION_GRACE_MS = 5_000; function runResult(command, args, options = {}) { @@ -73,51 +70,30 @@ async function installLinuxCandidate() { async function installWindowsCandidate(temporaryRoot) { const installer = await findArtifact(".exe"); - const failures = []; - for (let attempt = 1; attempt <= WINDOWS_INSTALL_ATTEMPTS; attempt += 1) { - const installDirectory = path.join(temporaryRoot, "installed", `Code UX attempt ${attempt}`); - await rm(installDirectory, { recursive: true, force: true }); - await mkdir(installDirectory, { recursive: true }); - // NSIS requires /D= to be the final, completely unquoted command-line segment even when the - // destination contains spaces. Node otherwise quotes that argument on Windows and the generated - // installer can terminate before extracting the application. - // Force the current-user mode used by the shipped installer and keep the smoke isolated under - // its temporary root. The custom NSIS beta page explicitly aborts in silent mode, so the - // release probe never initializes interactive nsDialogs while no desktop is attached. - const result = runResult(installer, ["/S", "/currentuser", `/D=${installDirectory}`], { - windowsVerbatimArguments: true, - }); - if (result.status === 0) { - const executable = path.join(installDirectory, "Code UX.exe"); - await access(executable); - return { command: executable, args: [] }; - } - + const installDirectory = path.join(temporaryRoot, "installed", "Code UX"); + await rm(installDirectory, { recursive: true, force: true }); + await mkdir(installDirectory, { recursive: true }); + // NSIS requires /D= to be the final, completely unquoted command-line segment even when the + // destination contains spaces. Node otherwise quotes that argument on Windows and the generated + // installer can terminate before extracting the application. + // Force the current-user mode used by the shipped installer and keep the smoke isolated under + // its temporary root. The custom NSIS beta page explicitly aborts in silent mode, so the + // release probe never initializes interactive nsDialogs while no desktop is attached. + const result = runResult(installer, ["/S", "/currentuser", `/D=${installDirectory}`], { + windowsVerbatimArguments: true, + }); + if (result.status !== 0) { const normalizedStatus = typeof result.status === "number" - ? result.status >>> 0 + ? `0x${(result.status >>> 0).toString(16).toUpperCase().padStart(8, "0")}` : null; - failures.push({ - attempt, - status: result.status, - normalizedStatus: normalizedStatus === null - ? null - : `0x${normalizedStatus.toString(16).toUpperCase().padStart(8, "0")}`, - }); - const canRetry = attempt < WINDOWS_INSTALL_ATTEMPTS - && normalizedStatus === WINDOWS_ACCESS_VIOLATION; - if (!canRetry) { - throw new Error( - `${installer} failed during silent install: ${JSON.stringify(failures)}.`, - ); - } - const retryDelayMs = WINDOWS_INSTALL_RETRY_DELAYS_MS[attempt - 1]; - console.warn( - `Windows installer hit transient access violation on attempt ${attempt}; ` - + `retrying in ${retryDelayMs}ms with a fresh directory.`, + throw new Error( + `${installer} failed during silent install with status ` + + `${normalizedStatus ?? result.status ?? "unknown"}.`, ); - await new Promise((resolve) => setTimeout(resolve, retryDelayMs)); } - throw new Error(`${installer} did not produce an installed application.`); + const executable = path.join(installDirectory, "Code UX.exe"); + await access(executable); + return { command: executable, args: [] }; } async function installMacCandidate(temporaryRoot) { diff --git a/src/services/custom-nodes/custom-node-project-service.ts b/src/services/custom-nodes/custom-node-project-service.ts index 12d1233fa9..5120f63b6e 100644 --- a/src/services/custom-nodes/custom-node-project-service.ts +++ b/src/services/custom-nodes/custom-node-project-service.ts @@ -108,9 +108,9 @@ function projectFiles(manifest: CustomNodeManifest): Record { return { "node.json": `${JSON.stringify(manifest, null, 2)}\n`, "package.json": `${JSON.stringify({ - name: packageName, version: `${manifest.version}.0.0`, private: true, type: "module", packageManager: "pnpm@11.13.0", + name: packageName, version: `${manifest.version}.0.0`, private: true, type: "module", packageManager: "pnpm@11.13.1", scripts: { typecheck: "tsc --noEmit", build: "tsc", test: "node --test dist/tests/*.test.js" }, - devDependencies: { "@types/node": "25.6.0", typescript: "5.9.3" }, + devDependencies: { "@types/node": "22.20.1", typescript: "5.9.3" }, }, null, 2)}\n`, "pnpm-lock.yaml": lockfile(packageName), "tsconfig.json": `${JSON.stringify({ compilerOptions: { @@ -127,7 +127,7 @@ function projectFiles(manifest: CustomNodeManifest): Record { } function lockfile(packageName: string): string { - return `lockfileVersion: '9.0'\n\nsettings:\n autoInstallPeers: false\n excludeLinksFromLockfile: false\n\nimporters:\n .:\n devDependencies:\n '@types/node':\n specifier: 25.6.0\n version: 25.6.0\n typescript:\n specifier: 5.9.3\n version: 5.9.3\n\npackages:\n '@types/node@25.6.0':\n resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}\n typescript@5.9.3:\n resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}\n engines: {node: '>=14.17'}\n hasBin: true\n undici-types@7.19.2:\n resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}\n\nsnapshots:\n '@types/node@25.6.0':\n dependencies:\n undici-types: 7.19.2\n typescript@5.9.3: {}\n undici-types@7.19.2: {}\n# ${packageName}\n`; + return `lockfileVersion: '9.0'\n\nsettings:\n autoInstallPeers: false\n excludeLinksFromLockfile: false\n\nimporters:\n .:\n devDependencies:\n '@types/node':\n specifier: 22.20.1\n version: 22.20.1\n typescript:\n specifier: 5.9.3\n version: 5.9.3\n\npackages:\n '@types/node@22.20.1':\n resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==}\n typescript@5.9.3:\n resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}\n engines: {node: '>=14.17'}\n hasBin: true\n undici-types@6.21.0:\n resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}\n\nsnapshots:\n '@types/node@22.20.1':\n dependencies:\n undici-types: 6.21.0\n typescript@5.9.3: {}\n undici-types@6.21.0: {}\n# ${packageName}\n`; } function sdkSource(): string { diff --git a/tests/backend/ci/workflow-health.test.ts b/tests/backend/ci/workflow-health.test.ts index 0dfdadbab4..f8a708a55d 100644 --- a/tests/backend/ci/workflow-health.test.ts +++ b/tests/backend/ci/workflow-health.test.ts @@ -11,15 +11,25 @@ const WORKFLOWS = { openrouterSprintE2e: ".github/workflows/openrouter-sprint-e2e.yml", mockupSprintOrchestration: ".github/workflows/mockup-sprint-orchestration.yml", } as const; +const ALL_WORKFLOWS = { + ...WORKFLOWS, + modelsCatalog: ".github/workflows/models-catalog.yml", + runtimeImage: ".github/workflows/runtime-image.yml", +} as const; const PLAYWRIGHT_CONFIG = "playwright.config.ts"; const CORE_FACTORY = "src/app/dependency-factory/core-factory.ts"; const RELEASE_INSTALL_VERIFIER = "scripts/verify-release-install.mjs"; const ELECTRON_RUNTIME_PREPARER = "scripts/prepare-electron-runtime-deps.mjs"; +const DEPENDABOT_CONFIG = ".github/dependabot.yml"; +const PNPM_WORKSPACE = "pnpm-workspace.yaml"; +const MANAGED_RUNTIME_DOCKERFILE = "containers/runtime/Dockerfile"; const ELECTRON_INSTALL_SMOKE = "pnpm run electron:smoke-installed"; const REQUIRED_INSTALL = "pnpm install --frozen-lockfile --ignore-scripts"; -const PACKAGE_MANAGER_VERSION = "11.13.0"; +const PACKAGE_MANAGER_VERSION = "11.13.1"; const MINIMUM_NODE_VERSION = "22.13"; +const PNPM_ACTION_REF = "pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9"; +const RELEASE_ACTION_REF = "softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2"; type PackageJson = { packageManager?: string; @@ -42,12 +52,14 @@ function getJobBlock(workflow: string, jobName: string): string { return block ?? ""; } -function expectPinnedMajorActionVersions(workflow: string, label: string): void { - const actionUses = workflow.match(/uses:\s*[^@\s]+@[^\s]+/g) ?? []; +function expectImmutableActionVersions(workflow: string, label: string): void { + const actionUses = workflow.match(/uses:\s*[^@\s]+@[^\s]+(?:\s+#\s+[^\n]+)?/g) ?? []; expect(actionUses.length, `${label} should use GitHub Actions`).toBeGreaterThan(0); for (const actionUse of actionUses) { - expect(actionUse, `${label} should pin action versions to an explicit major version`).toMatch(/@v\d+$/); + expect(actionUse, `${label} should pin actions to immutable commit SHAs`).toMatch( + /@[0-9a-f]{40}\s+#\s+v?\d+(?:\.\d+){1,2}$/, + ); } } @@ -79,7 +91,7 @@ function expectManualOnly(workflow: string, label: string): void { } describe("GitHub workflow health", () => { - it("keeps package toolchain policy pinned to pnpm 11.13.0 and Node 22.13 or newer", async () => { + it("keeps package toolchain policy pinned to pnpm 11.13.1 and Node 22.13 or newer", async () => { const packageJson = JSON.parse(await readRepoFile("package.json")) as PackageJson; expect(packageJson.packageManager).toBe(`pnpm@${PACKAGE_MANAGER_VERSION}`); @@ -87,7 +99,23 @@ describe("GitHub workflow health", () => { expect(packageJson.scripts?.audit).toBe("pnpm audit --audit-level=high"); }); - it("keeps security-relevant workflows on least-privilege permissions and pinned major actions", async () => { + it("pins every workflow action to an immutable reviewed release commit", async () => { + const workflows = await Promise.all( + Object.entries(ALL_WORKFLOWS).map(async ([label, workflowPath]) => [ + label, + await readRepoFile(workflowPath), + ] as const), + ); + + for (const [label, workflow] of workflows) { + expectImmutableActionVersions(workflow, label); + expect(workflow, `${label} should resolve pnpm from packageManager`).not.toMatch( + /uses: pnpm\/action-setup@[^\n]+\n\s+with:\n\s+version:/, + ); + } + }); + + it("keeps security-relevant workflows on least-privilege permissions", async () => { const workflows = await Promise.all( Object.entries(WORKFLOWS).map(async ([label, workflowPath]) => [ label, @@ -96,7 +124,6 @@ describe("GitHub workflow health", () => { ); for (const [label, workflow] of workflows) { - expectPinnedMajorActionVersions(workflow, label); expectNoBroadWorkflowPermissions(workflow, label); } @@ -161,7 +188,8 @@ describe("GitHub workflow health", () => { expect(job).toContain("needs: preflight"); expect(job).toContain(REQUIRED_INSTALL); expect(job).toContain("node-version: ${{ env.NODE_VERSION }}"); - expect(job).toContain("version: ${{ env.PNPM_VERSION }}"); + expect(job).toContain(PNPM_ACTION_REF); + expect(job).not.toMatch(/Setup pnpm[\s\S]*?\n\s+version:/); expect(job).toContain("run_install: false"); } @@ -169,7 +197,8 @@ describe("GitHub workflow health", () => { expect(job).toContain("needs: [static, build, security-audit]"); expect(job).toContain(REQUIRED_INSTALL); expect(job).toContain("node-version: ${{ env.NODE_VERSION }}"); - expect(job).toContain("version: ${{ env.PNPM_VERSION }}"); + expect(job).toContain(PNPM_ACTION_REF); + expect(job).not.toMatch(/Setup pnpm[\s\S]*?\n\s+version:/); expect(job).toContain("run_install: false"); } @@ -286,6 +315,28 @@ describe("GitHub workflow health", () => { expect(electronRuntimePreparer).toContain("validateRuntimeTree();"); }); + it("enforces package-age review and automated dependency update tracking", async () => { + const [workspace, dependabot, runtimeDockerfile] = await Promise.all([ + readRepoFile(PNPM_WORKSPACE), + readRepoFile(DEPENDABOT_CONFIG), + readRepoFile(MANAGED_RUNTIME_DOCKERFILE), + ]); + + expect(workspace).toContain("minimumReleaseAge: 1440"); + expect(workspace).toContain("minimumReleaseAgeStrict: true"); + expect(workspace).toContain("minimumReleaseAgeExclude:"); + expect(workspace).toContain( + "allowBuilds:\n electron-winstaller: false\n onnxruntime-node: true", + ); + expect(dependabot).toContain("package-ecosystem: npm"); + expect(dependabot).toContain("package-ecosystem: github-actions"); + expect(dependabot).toContain("package-ecosystem: docker"); + expect(dependabot.match(/target-branch: dev/g)).toHaveLength(3); + expect(runtimeDockerfile).toMatch(/^FROM node:24-trixie-slim@sha256:[0-9a-f]{64} AS base/m); + expect(runtimeDockerfile).toContain("ARG NPM_VERSION=12.0.1"); + expect(runtimeDockerfile).toContain("ARG PNPM_VERSION=11.13.1"); + }); + it("keeps legacy main ruleset contexts coupled to their current validation gates", async () => { const ci = await readRepoFile(WORKFLOWS.ci); const compatibilityJobs = [ @@ -354,7 +405,7 @@ describe("GitHub workflow health", () => { expect(preflight).toContain("Verify release tag is on main"); expect(publish).toContain("needs: release-preflight"); expect(publish).toContain("id-token: write"); - expect(publish).toContain("npm install -g npm@11.5.1"); + expect(publish).toContain("npm install -g npm@12.0.1"); expect(publish).toContain("npm provenance dependency OK"); expect(publish).toContain("npm publish"); expect(publish).not.toContain("pnpm run test:backend:coverage"); @@ -362,7 +413,7 @@ describe("GitHub workflow health", () => { expect(desktop).toContain("needs: release-preflight"); expect(desktop).toContain("contents: write"); expect(desktop).toContain("max-parallel: 3"); - expect(desktop).toContain("softprops/action-gh-release@v2"); + expect(desktop).toContain(RELEASE_ACTION_REF); expect(desktop).toContain("node node_modules/electron/install.js"); expect(desktop).toContain("pnpm run build && pnpm run electron:prepare-deps && pnpm exec electron-builder"); expect(desktop).toContain("--publish never"); diff --git a/tests/backend/electron-builder-config.test.ts b/tests/backend/electron-builder-config.test.ts index 330fdc6d25..52117db018 100644 --- a/tests/backend/electron-builder-config.test.ts +++ b/tests/backend/electron-builder-config.test.ts @@ -6,6 +6,21 @@ import { describe, expect, it } from "vitest"; const require = createRequire(import.meta.url); describe("electron-builder packaged defaults", () => { + it("uses the current NSIS toolset instead of the legacy installer runtime", () => { + const config = require("../../electron-builder.config.cjs") as { + toolsets?: { nsis?: string }; + }; + const packageJson = JSON.parse(fs.readFileSync(path.join(process.cwd(), "package.json"), "utf8")) as { + devDependencies?: Record; + packageManager?: string; + }; + + expect(config.toolsets?.nsis).toBe("1.2.1"); + expect(packageJson.devDependencies?.["electron-builder"]).toBe("26.15.6"); + expect(packageJson.devDependencies?.tslib).toBe("^2.8.1"); + expect(packageJson.packageManager).toBe("pnpm@11.13.1"); + }); + it("packages the automatic model-pricing catalogue used by desktop stats", () => { const config = require("../../electron-builder.config.cjs") as { files?: string[]; @@ -119,6 +134,7 @@ describe("electron-builder packaged defaults", () => { expect(preparer).toContain("validateRuntimeTree();"); expect(preparer).toContain("@modelcontextprotocol/sdk/server/index.js"); expect(preparer).toContain('"zod"'); + expect(preparer).toContain('"onnxruntime-node"'); expect(config.linux?.executableName).toBe("codeux"); }); @@ -136,12 +152,9 @@ describe("electron-builder packaged defaults", () => { expect(installerSmoke).toContain('findArtifact(".deb")'); expect(installerSmoke).toContain('["/S", "/currentuser", `/D=${installDirectory}`]'); expect(installerSmoke).toContain("windowsVerbatimArguments: true"); - expect(installerSmoke).toContain("WINDOWS_ACCESS_VIOLATION"); - expect(installerSmoke).toContain("WINDOWS_INSTALL_RETRY_DELAYS_MS = [1_500, 5_000, 15_000]"); - expect(installerSmoke).toContain("WINDOWS_INSTALL_RETRY_DELAYS_MS.length + 1"); - expect(installerSmoke).toContain("normalizedStatus === WINDOWS_ACCESS_VIOLATION"); - expect(installerSmoke).toContain("WINDOWS_INSTALL_RETRY_DELAYS_MS[attempt - 1]"); - expect(installerSmoke).toContain("retrying in ${retryDelayMs}ms with a fresh directory"); + expect(installerSmoke).not.toContain("WINDOWS_INSTALL_RETRY_DELAYS_MS"); + expect(installerSmoke).not.toContain("WINDOWS_ACCESS_VIOLATION"); + expect(installerSmoke).toContain("failed during silent install with status"); expect(installerSmoke).toContain('findArtifact(".dmg")'); expect(installerSmoke).toContain('run("hdiutil", ["attach"'); expect(installerSmoke).toContain('input: "Y\\n"'); From b28774140e925186536c2359e929afd827ea7cc5 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 16 Jul 2026 19:47:35 +0200 Subject: [PATCH 2/2] fix: isolate NSIS custom plugins --- docs/deployment/electron-desktop.md | 4 ++-- electron-builder.config.cjs | 11 +++++++++++ tests/backend/electron-builder-config.test.ts | 12 ++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/deployment/electron-desktop.md b/docs/deployment/electron-desktop.md index 03b174bfce..763005d9ea 100644 --- a/docs/deployment/electron-desktop.md +++ b/docs/deployment/electron-desktop.md @@ -67,7 +67,7 @@ macOS DMG builds include the MIT license resource through `build/license_en.txt` - `pnpm run electron:dist:win`: build Windows targets. - `pnpm run electron:benchmark:runtime`: launch Electron with an isolated temporary user profile, navigate dashboard routes, probe backend endpoints, and write route/API/renderer/runtime metrics under `.cache/electron-runtime-benchmark/`. - `pnpm run electron:benchmark:win`: build Windows installers with `normal` and `store` compression and write timing/size data to `release/electron-benchmark/summary.json`. -- `pnpm run electron:smoke-installed`: select the native package in `release/electron/` whose artifact name matches the current `package.json` version, install it, start that installed app with an isolated profile, and wait until its backend and renderer are ready. Linux and Windows require the isolated app probe to exit with code zero. macOS validates the durably written readiness marker, then the parent smoke harness terminates only that validated probe with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can defer both `app.exit()` and `process.exit()` after readiness. Linux requires passwordless `sudo` and `xvfb-run`, as provided by the release runners. Windows explicitly selects the current-user NSIS mode and passes the silent install arguments verbatim because NSIS requires its final `/D=` destination segment to remain unquoted even when the isolated path contains spaces. The custom beta notice is skipped before `nsDialogs` initialization during silent installs; it remains visible for normal interactive installation. The Windows release toolchain uses Electron Builder 26.15.6 with its pnpm 11 dependency-collection repairs and opts into the NSIS 3.12 toolset (`toolsets.nsis: "1.2.1"`), avoiding the legacy `System.dll` per-user installer crash that surfaced as `0xC0000005` on current `windows-latest` runners. The smoke test performs one install attempt and fails immediately on any non-zero status, so retries cannot mask a broken candidate. macOS supplies affirmative input to `hdiutil` so the CI-owned smoke can mount a DMG containing the embedded MIT license without an interactive terminal. +- `pnpm run electron:smoke-installed`: select the native package in `release/electron/` whose artifact name matches the current `package.json` version, install it, start that installed app with an isolated profile, and wait until its backend and renderer are ready. Linux and Windows require the isolated app probe to exit with code zero. macOS validates the durably written readiness marker, then the parent smoke harness terminates only that validated probe with `SIGTERM` and a bounded `SIGKILL` fallback because Electron/AppKit can defer both `app.exit()` and `process.exit()` after readiness. Linux requires passwordless `sudo` and `xvfb-run`, as provided by the release runners. Windows explicitly selects the current-user NSIS mode and passes the silent install arguments verbatim because NSIS requires its final `/D=` destination segment to remain unquoted even when the isolated path contains spaces. The custom beta notice is skipped before `nsDialogs` initialization during silent installs; it remains visible for normal interactive installation. The Windows release toolchain uses Electron Builder 26.15.6 with its pnpm 11 dependency-collection repairs and opts into the NSIS 3.12 toolset (`toolsets.nsis: "1.2.1"`), avoiding the legacy `System.dll` per-user installer crash that surfaced as `0xC0000005` on current `windows-latest` runners. Electron Builder's checksum-pinned standalone NSIS resource archive supplies only its additional installer plugins; the NSIS 3.12 bundle remains the source for `nsDialogs`, `System.dll`, and the compiler itself. This separation prevents native Windows `makensis` from discovering the same standard plugin commands through both `NSISDIR` and an added plugin directory. The smoke test performs one install attempt and fails immediately on any non-zero status, so retries cannot mask a broken candidate. macOS supplies affirmative input to `hdiutil` so the CI-owned smoke can mount a DMG containing the embedded MIT license without an interactive terminal. - `pnpm run electron:install-deps`: rebuild native app dependencies for Electron. The release output is written to `release/electron/`. @@ -131,7 +131,7 @@ Use `.github/workflows/release.yml` for published desktop releases. It is the la The no-secret release-candidate package lane is part of `.github/workflows/ci.yml`, named `Code UX CI Pipeline`. It runs for `main` validation and manual dispatches after package smoke, keeping the full desktop package proof out of the routine `dev` lane. -The `10 Release Candidate / desktop package` matrix starts as soon as the package smoke job passes, so desktop packaging can run beside the E2E and orchestration matrices instead of waiting for them to finish. It downloads the shared `codeux-build-linux` artifact, installs the cached Electron binary, rebuilds Electron native dependencies, prepares runtime assets, and runs Electron Builder directly with `--linux`, `--mac`, or `--win` plus `--publish never`. After compilation, every native runner installs its candidate—the Linux `.deb`, Windows NSIS `.exe`, or macOS app copied from the `.dmg`—and starts that installed copy with an isolated home and dashboard port. The Windows smoke selects current-user installation, preserves NSIS's required unquoted final `/D=` destination segment, and skips the interactive beta page before its dialog plugin is initialized. Electron Builder 26.15.6 and NSIS 3.12 remove the legacy assisted per-user installer crash; the lane therefore requires the first installation attempt to succeed and reports the exact hexadecimal failure status otherwise. The macOS smoke accepts the DMG's embedded MIT license through `hdiutil` stdin before mounting. Success requires the packaged backend to start, the dashboard renderer to finish loading, and an atomic readiness marker to be written. Linux and Windows then require a zero-code probe exit; on macOS the parent harness owns teardown after validation, using `SIGTERM` with a short `SIGKILL` fallback so upstream AppKit exit deferral cannot turn a healthy installed app into a false failure. Built native artifacts are uploaded whenever packaging succeeded, even if the installed-app smoke fails, preserving evidence for release debugging. Production shutdowns remain unchanged and still drain the embedded server. The package smoke job that precedes it runs `node scripts/verify-release-install.mjs` with `CODE_UX_SKIP_RELEASE_INSTALL_BUILD=1`, so the npm tarball install check uses the same compiled artifact instead of rebuilding. +The `10 Release Candidate / desktop package` matrix starts as soon as the package smoke job passes, so desktop packaging can run beside the E2E and orchestration matrices instead of waiting for them to finish. It downloads the shared `codeux-build-linux` artifact, installs the cached Electron binary, rebuilds Electron native dependencies, prepares runtime assets, and runs Electron Builder directly with `--linux`, `--mac`, or `--win` plus `--publish never`. After compilation, every native runner installs its candidate—the Linux `.deb`, Windows NSIS `.exe`, or macOS app copied from the `.dmg`—and starts that installed copy with an isolated home and dashboard port. The Windows smoke selects current-user installation, preserves NSIS's required unquoted final `/D=` destination segment, and skips the interactive beta page before its dialog plugin is initialized. Electron Builder 26.15.6 and NSIS 3.12 remove the legacy assisted per-user installer crash, while the isolated Electron Builder plugin archive prevents duplicate standard plugin discovery during compilation; the lane therefore requires both package creation and the first installation attempt to succeed. The macOS smoke accepts the DMG's embedded MIT license through `hdiutil` stdin before mounting. Success requires the packaged backend to start, the dashboard renderer to finish loading, and an atomic readiness marker to be written. Linux and Windows then require a zero-code probe exit; on macOS the parent harness owns teardown after validation, using `SIGTERM` with a short `SIGKILL` fallback so upstream AppKit exit deferral cannot turn a healthy installed app into a false failure. Built native artifacts are uploaded whenever packaging succeeded, even if the installed-app smoke fails, preserving evidence for release debugging. Production shutdowns remain unchanged and still drain the embedded server. The package smoke job that precedes it runs `node scripts/verify-release-install.mjs` with `CODE_UX_SKIP_RELEASE_INSTALL_BUILD=1`, so the npm tarball install check uses the same compiled artifact instead of rebuilding. Release-candidate packaging sets `CSC_IDENTITY_AUTO_DISCOVERY=false` for unsigned Electron packaging and passes `--publish never` to Electron Builder. It does not require provider API keys, npm publishing credentials, Docker credentials, GitHub Release events, or real project state. When Electron output exists, the workflow uploads files from `release/electron/` as workflow artifacts only; it does not publish to npm or attach files to a GitHub Release. diff --git a/electron-builder.config.cjs b/electron-builder.config.cjs index 1eff777f27..7b6af58991 100644 --- a/electron-builder.config.cjs +++ b/electron-builder.config.cjs @@ -106,6 +106,17 @@ module.exports = { allowToChangeInstallationDirectory: true, allowElevation: true, perMachine: false, + // Electron Builder 26.15.6 points its unified NSIS 3.12 bundle back at + // NSISDIR/windows/Plugins on native Windows. makensis already searches + // that directory, so assisted installers see duplicate nsDialogs/System + // plugin commands and abort before producing the installer. Keep the + // NSIS 3.12 compiler and standard plugins, but source Electron Builder's + // extra plugins from its checksum-pinned standalone resource archive. + customNsisResources: { + version: "3.4.1", + url: "https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z", + checksum: "593a9a92ef958321293ac6a2ee61e64bf1bd543142a5bd6b3d310709cc924103", + }, runAfterFinish: true, createDesktopShortcut: true, createStartMenuShortcut: true, diff --git a/tests/backend/electron-builder-config.test.ts b/tests/backend/electron-builder-config.test.ts index 52117db018..99222f2ae6 100644 --- a/tests/backend/electron-builder-config.test.ts +++ b/tests/backend/electron-builder-config.test.ts @@ -9,6 +9,13 @@ describe("electron-builder packaged defaults", () => { it("uses the current NSIS toolset instead of the legacy installer runtime", () => { const config = require("../../electron-builder.config.cjs") as { toolsets?: { nsis?: string }; + nsis?: { + customNsisResources?: { + version?: string; + url?: string; + checksum?: string; + }; + }; }; const packageJson = JSON.parse(fs.readFileSync(path.join(process.cwd(), "package.json"), "utf8")) as { devDependencies?: Record; @@ -16,6 +23,11 @@ describe("electron-builder packaged defaults", () => { }; expect(config.toolsets?.nsis).toBe("1.2.1"); + expect(config.nsis?.customNsisResources).toEqual({ + version: "3.4.1", + url: "https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z", + checksum: "593a9a92ef958321293ac6a2ee61e64bf1bd543142a5bd6b3d310709cc924103", + }); expect(packageJson.devDependencies?.["electron-builder"]).toBe("26.15.6"); expect(packageJson.devDependencies?.tslib).toBe("^2.8.1"); expect(packageJson.packageManager).toBe("pnpm@11.13.1");