From c26312bafe23a9fb222367f9224dda38fd882d4f Mon Sep 17 00:00:00 2001 From: Johnny Huynh <27847622+johnnyhuy@users.noreply.github.com> Date: Fri, 25 Sep 2026 23:38:47 +1000 Subject: [PATCH] feat: ship desktop installers and public package taps Releases were CalVer tags with no artefacts. Package DMG/NSIS/AppImage on a three-runner matrix, publish GHCR, and point Homebrew/Winget/Scoop at echohello-dev/homebrew-tap until the official directories list us. Co-authored-by: Cursor --- .dockerignore | 3 + .github/workflows/release.yml | 201 +++++++++++++- .gitignore | 1 + .mise.toml | 19 +- Casks/pidex.rb | 21 ++ Dockerfile | 36 +++ README.md | 48 +++- assets/icon.png | Bin 0 -> 48633 bytes assets/icon.svg | 12 + build/entitlements.mac.plist | 12 + bun.lock | 365 ++++++++++++++++++++++++- docs/adr/0009-calver-releases.md | 5 +- docs/adr/0010-distribution-channels.md | 20 ++ docs/adr/README.md | 3 +- docs/distribution.md | 75 +++++ electron-builder.yml | 64 +++++ package.json | 8 +- scripts/build-logo.py | 44 ++- scripts/release-manifests.ts | 165 +++++++++++ scripts/write-release-manifests.ts | 23 ++ src/main/index.ts | 1 + tests/unit/release-manifests.test.ts | 81 ++++++ 22 files changed, 1181 insertions(+), 26 deletions(-) create mode 100644 .dockerignore create mode 100644 Casks/pidex.rb create mode 100644 Dockerfile create mode 100644 assets/icon.png create mode 100644 assets/icon.svg create mode 100644 build/entitlements.mac.plist create mode 100644 docs/adr/0010-distribution-channels.md create mode 100644 docs/distribution.md create mode 100644 electron-builder.yml create mode 100644 scripts/release-manifests.ts create mode 100644 scripts/write-release-manifests.ts create mode 100644 tests/unit/release-manifests.test.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..41b9c58 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +* +!linux-unpacked +!linux-unpacked/** diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b6e4631..8f65fc6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,13 +3,21 @@ name: release on: push: branches: [main] + workflow_dispatch: permissions: contents: write + packages: write + +env: + CSC_IDENTITY_AUTO_DISCOVERY: false jobs: - release: + tag: runs-on: ubuntu-latest + outputs: + tag: ${{ steps.calver.outputs.tag }} + semver: ${{ steps.calver.outputs.semver }} steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: @@ -18,6 +26,7 @@ jobs: - name: compute calver tag id: calver run: | + set -euo pipefail base="$(date -u +%Y.%m.%d)" git fetch --tags --quiet tag="$base" @@ -28,9 +37,195 @@ jobs: done tag="$base-$n" fi + if [[ "$tag" =~ ^([0-9]{4})\.([0-9]{2})\.([0-9]{2})(-([0-9]+))?$ ]]; then + semver="$((10#${BASH_REMATCH[1]})).$((10#${BASH_REMATCH[2]})).$((10#${BASH_REMATCH[3]}))" + if [[ -n "${BASH_REMATCH[5]:-}" ]]; then + semver="${semver}-${BASH_REMATCH[5]}" + fi + else + echo "invalid calver tag: $tag" >&2 + exit 1 + fi echo "tag=$tag" >> "$GITHUB_OUTPUT" + echo "semver=$semver" >> "$GITHUB_OUTPUT" - - name: create release - run: gh release create "${{ steps.calver.outputs.tag }}" --generate-notes --title "${{ steps.calver.outputs.tag }}" + - name: create draft release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ steps.calver.outputs.tag }} + run: | + set -euo pipefail + notes="$(gh api "repos/${GITHUB_REPOSITORY}/releases/generate-notes" -f tag_name="$TAG" --jq .body)" + { + echo "## Install" + echo + echo "| Platform | Artefact |" + echo "|---|---|" + echo "| macOS Apple silicon | \`pidex-mac-arm64.dmg\` |" + echo "| macOS Intel | \`pidex-mac-x64.dmg\` |" + echo "| Windows | \`pidex-win-x64.exe\` |" + echo "| Linux | \`pidex-linux-x64.AppImage\` |" + echo "| Docker | \`docker pull ghcr.io/echohello-dev/pidex:${TAG}\` |" + echo + echo "macOS via Homebrew:" + echo + echo '```' + echo "brew tap echohello-dev/tap" + echo "brew install --cask pidex" + echo '```' + echo + echo "Windows via the same tap (WinGet cannot add a GitHub repo as a source):" + echo + echo '```' + echo "irm https://raw.githubusercontent.com/echohello-dev/homebrew-tap/main/winget/install-pidex.ps1 | iex" + echo '```' + echo + echo "$notes" + } > /tmp/notes.md + gh release create "$TAG" --draft --title "$TAG" --notes-file /tmp/notes.md + + package: + needs: tag + strategy: + fail-fast: false + matrix: + include: + - os: macos-latest + args: --mac --arm64 --x64 + - os: windows-latest + args: --win --x64 + - os: ubuntu-latest + args: --linux --x64 + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + with: + install: true + - run: bun install --frozen-lockfile + - name: bundle + run: mise run bundle + - name: package + env: + SEMVER: ${{ needs.tag.outputs.semver }} + run: bunx electron-builder ${{ matrix.args }} -c.extraMetadata.version="$SEMVER" --publish never + - name: upload installers + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ needs.tag.outputs.tag }} + run: | + set -euo pipefail + shopt -s nullglob + assets=(release/pidex-*.dmg release/pidex-*.zip release/pidex-*.exe release/pidex-*.AppImage release/pidex-*.deb release/pidex-*.blockmap release/latest*.yml) + if [[ ${#assets[@]} -eq 0 ]]; then + echo "no installer artefacts in release/" >&2 + ls -la release/ >&2 || true + exit 1 + fi + gh release upload "$TAG" "${assets[@]}" --clobber + - name: stash linux unpacked app + if: runner.os == 'Linux' + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: linux-unpacked + path: release/linux-unpacked + if-no-files-found: error + + docker: + needs: [tag, package] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: linux-unpacked + path: linux-unpacked + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0 + id: meta + with: + images: ghcr.io/echohello-dev/pidex + tags: | + type=raw,value=${{ needs.tag.outputs.tag }} + type=raw,value=latest + - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + manifests: + needs: [tag, package] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + with: + install: true + - name: download release artefacts + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ needs.tag.outputs.tag }} + run: gh release download "$TAG" --dir /tmp/rel --pattern 'pidex-*' + - name: write checksums and store manifests + env: + TAG: ${{ needs.tag.outputs.tag }} + run: | + set -euo pipefail + python3 - <<'PY' + import hashlib, json, pathlib + out = {} + lines = [] + for path in sorted(pathlib.Path("/tmp/rel").glob("pidex-*")): + if path.name.endswith(".blockmap"): + continue + digest = hashlib.sha256(path.read_bytes()).hexdigest() + out[path.name] = digest + lines.append(f"{digest} {path.name}") + pathlib.Path("checksums.json").write_text(json.dumps(out, indent=2) + "\n") + pathlib.Path("SHA256SUMS.txt").write_text("\n".join(lines) + "\n") + PY + bun scripts/write-release-manifests.ts --tag "$TAG" --out /tmp/manifests --checksums checksums.json + - name: upload manifests + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ needs.tag.outputs.tag }} + run: | + gh release upload "$TAG" \ + SHA256SUMS.txt \ + /tmp/manifests/pidex.rb \ + /tmp/manifests/echoHello.Pidex.yaml \ + /tmp/manifests/pidex.json \ + --clobber + + publish: + needs: [tag, package, docker, manifests] + runs-on: ubuntu-latest + steps: + - name: publish release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ needs.tag.outputs.tag }} + run: gh release edit "$TAG" --draft=false --latest + - name: notify homebrew tap + env: + GH_TOKEN: ${{ secrets.TAP_TOKEN }} + TAG: ${{ needs.tag.outputs.tag }} + run: | + set -euo pipefail + if [ -z "${GH_TOKEN:-}" ]; then + echo "TAP_TOKEN unset; tap will pick up $TAG on its hourly cron" + exit 0 + fi + gh api repos/echohello-dev/homebrew-tap/dispatches -f event_type=pidex-release diff --git a/.gitignore b/.gitignore index e7ab7f1..6c94a41 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules/ dist/ +release/ .vite/ .DS_Store *.log diff --git a/.mise.toml b/.mise.toml index 5f2684d..132e86e 100644 --- a/.mise.toml +++ b/.mise.toml @@ -19,6 +19,14 @@ run = [ "bunx electron .", ] +[tasks.bundle] +description = "Compile main, preload, and renderer" +run = [ + "bunx tsc -p tsconfig.main.json", + "bunx tsc -p tsconfig.preload.json", + "bunx vite build", +] + [tasks.build] description = "Production build: lint, typecheck, test, bundle" run = [ @@ -26,9 +34,14 @@ run = [ "bun run typecheck", "bun run test:unit", "bun run test:integration", - "bunx tsc -p tsconfig.main.json", - "bunx tsc -p tsconfig.preload.json", - "bunx vite build", + "mise run bundle", +] + +[tasks.package] +description = "Build native installers for this platform" +run = [ + "mise run bundle", + "bunx electron-builder --publish never", ] [tasks.start] diff --git a/Casks/pidex.rb b/Casks/pidex.rb new file mode 100644 index 0000000..310d9a1 --- /dev/null +++ b/Casks/pidex.rb @@ -0,0 +1,21 @@ +cask "pidex" do + arch arm: "arm64", intel: "x64" + + version :latest + sha256 :no_check + + url "https://github.com/echohello-dev/pidex/releases/latest/download/pidex-mac-#{arch}.dmg" + name "pidex" + desc "Desktop workbench for the Pi coding agent" + homepage "https://github.com/echohello-dev/pidex" + + depends_on macos: :sonoma + + app "pidex.app" + + zap trash: [ + "~/Library/Application Support/pidex", + "~/Library/Preferences/dev.echohello.pidex.plist", + "~/Library/Saved Application State/dev.echohello.pidex.savedState", + ] +end diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..630536a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# Linux desktop image for X11/Wayland forwarding. The native installers +# (DMG, NSIS, AppImage) are the supported way to run pidex day to day. +FROM debian:bookworm-slim + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates \ + libasound2 \ + libatk-bridge2.0-0 \ + libatk1.0-0 \ + libatspi2.0-0 \ + libcairo2 \ + libcups2 \ + libdbus-1-3 \ + libdrm2 \ + libgbm1 \ + libgtk-3-0 \ + libnspr4 \ + libnss3 \ + libpango-1.0-0 \ + libx11-6 \ + libxcb1 \ + libxcomposite1 \ + libxdamage1 \ + libxext6 \ + libxfixes3 \ + libxkbcommon0 \ + libxrandr2 \ + libxshmfence1 \ + && rm -rf /var/lib/apt/lists/* + +COPY linux-unpacked /opt/pidex +RUN chmod +x /opt/pidex/pidex + +ENV ELECTRON_DISABLE_SECURITY_WARNINGS=1 +ENTRYPOINT ["/opt/pidex/pidex"] diff --git a/README.md b/README.md index 0121891..3ef969f 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,11 @@ **A desktop workbench for the Pi coding agent.** **Workspace-first, not chat-first.** -[Quick Start](#quick-start) · [Architecture](docs/pidex-architecture.md) +[Install](#install) · [Quick Start](#quick-start) · [Architecture](docs/pidex-architecture.md) · [Distribution](docs/distribution.md) [![CI](https://github.com/echohello-dev/pidex/actions/workflows/ci.yml/badge.svg)](https://github.com/echohello-dev/pidex/actions/workflows/ci.yml) +[![Release](https://img.shields.io/github/v/release/echohello-dev/pidex)](https://github.com/echohello-dev/pidex/releases/latest) +[![License](https://img.shields.io/github/license/echohello-dev/pidex)](LICENSE) [![Electron 41](https://img.shields.io/badge/electron-41-blue)](https://www.electronjs.org/) [![React 19](https://img.shields.io/badge/react-19-blue)](https://react.dev/) [![TypeScript 6](https://img.shields.io/badge/typescript-6-blue)](https://www.typescriptlang.org/) @@ -25,9 +27,49 @@ Daily coding-agent work means juggling repos, branches, and sessions, and the cu | ![Boot](docs/assets/workbench-boot.gif) | ![Loaded](docs/assets/workbench-loaded.gif) | | App booting, workspaces populate | The workbench, fully loaded | +## Install + +You need the [Pi CLI](https://pi.dev/). The dashboard reads existing sessions from `~/.pi/agent/sessions`. + +### macOS + +```bash +$ brew tap echohello-dev/tap +$ brew install --cask pidex +``` + +Or download `pidex-mac-arm64.dmg` (Apple silicon) or `pidex-mac-x64.dmg` (Intel) from [Releases](https://github.com/echohello-dev/pidex/releases/latest). First launch is right-click → Open; the DMG is unsigned until we add a Developer ID. + +### Windows + +The [echohello-dev tap](https://github.com/echohello-dev/homebrew-tap) is the Winget source until `echoHello.Pidex` is in the community repo. WinGet cannot add a GitHub repo directly, so the tap ships a one-liner that installs the latest manifest: + +```powershell +> irm https://raw.githubusercontent.com/echohello-dev/homebrew-tap/main/winget/install-pidex.ps1 | iex +``` + +Scoop from the same tap: + +```powershell +> scoop bucket add echohello https://github.com/echohello-dev/homebrew-tap +> scoop install pidex +``` + +Or download `pidex-win-x64.exe` from [Releases](https://github.com/echohello-dev/pidex/releases/latest). + +### Linux + +```bash +$ curl -sL -o pidex.AppImage \ + https://github.com/echohello-dev/pidex/releases/latest/download/pidex-linux-x64.AppImage +$ chmod +x pidex.AppImage && ./pidex.AppImage +``` + +A `.deb` and a GHCR image (`ghcr.io/echohello-dev/pidex`) ship alongside. Docker needs an X11 socket; prefer the AppImage on a real desktop. Full matrix in [docs/distribution.md](docs/distribution.md). + ## Quick Start -You need [mise](https://mise.jdx.dev/) and the [Pi CLI](https://pi.dev/). The dashboard reads existing sessions from `~/.pi/agent/sessions`. +From source you need [mise](https://mise.jdx.dev/) as well. ```bash $ git clone git@github.com:echohello-dev/pidex.git && cd pidex @@ -36,7 +78,7 @@ $ bun install $ mise run dev # starts Vite + Electron ``` -For a production build: `mise run build` then `mise run start`. +For a production build: `mise run build` then `mise run start`. Native installers: `mise run package`. ## Architecture diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea89388fbaca8c14b87d37ffb68dc6e8ade1b5c GIT binary patch literal 48633 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 AuK)l5 literal 0 HcmV?d00001 diff --git a/assets/icon.svg b/assets/icon.svg new file mode 100644 index 0000000..0dc94e1 --- /dev/null +++ b/assets/icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 0000000..f2eb2ec --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.disable-library-validation + + + diff --git a/bun.lock b/bun.lock index 5975308..5157327 100644 --- a/bun.lock +++ b/bun.lock @@ -21,6 +21,7 @@ "@vitejs/plugin-react": "^6.0.0", "concurrently": "^9.1.0", "electron": "^41.0.0", + "electron-builder": "26.15.4", "jsdom": "^29.1.1", "oxlint": "^1.74.0", "playwright-core": "^1.61.1", @@ -64,8 +65,22 @@ "@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="], + "@electron/asar": ["@electron/asar@3.4.1", "", { "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", "minimatch": "^3.0.4" }, "bin": { "asar": "bin/asar.js" } }, "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA=="], + + "@electron/fuses": ["@electron/fuses@1.8.0", "", { "dependencies": { "chalk": "^4.1.1", "fs-extra": "^9.0.1", "minimist": "^1.2.5" }, "bin": { "electron-fuses": "dist/bin.js" } }, "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw=="], + "@electron/get": ["@electron/get@2.0.3", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ=="], + "@electron/notarize": ["@electron/notarize@2.5.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.1", "promise-retry": "^2.0.1" } }, "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A=="], + + "@electron/osx-sign": ["@electron/osx-sign@1.3.3", "", { "dependencies": { "compare-version": "^0.1.2", "debug": "^4.3.4", "fs-extra": "^10.0.0", "isbinaryfile": "^4.0.8", "minimist": "^1.2.6", "plist": "^3.0.5" }, "bin": { "electron-osx-flat": "bin/electron-osx-flat.js", "electron-osx-sign": "bin/electron-osx-sign.js" } }, "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg=="], + + "@electron/rebuild": ["@electron/rebuild@4.2.0", "", { "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.1.1", "node-abi": "^4.2.0", "node-api-version": "^0.2.1", "node-gyp": "^12.2.0", "read-binary-file-arch": "^1.0.6" }, "bin": { "electron-rebuild": "lib/cli.js" } }, "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ=="], + + "@electron/universal": ["@electron/universal@2.0.3", "", { "dependencies": { "@electron/asar": "^3.3.1", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "dir-compare": "^4.2.0", "fs-extra": "^11.1.1", "minimatch": "^9.0.3", "plist": "^3.1.0" } }, "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g=="], + + "@electron/windows-sign": ["@electron/windows-sign@1.2.2", "", { "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", "fs-extra": "^11.1.1", "minimist": "^1.2.8", "postject": "^1.0.0-alpha.6" }, "bin": { "electron-windows-sign": "bin/electron-windows-sign.js" } }, "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], @@ -86,10 +101,18 @@ "@hapi/topo": ["@hapi/topo@6.0.2", "", { "dependencies": { "@hapi/hoek": "^11.0.2" } }, "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + "@malept/cross-spawn-promise": ["@malept/cross-spawn-promise@2.0.0", "", { "dependencies": { "cross-spawn": "^7.0.1" } }, "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg=="], + + "@malept/flatpak-bundler": ["@malept/flatpak-bundler@0.4.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", "lodash": "^4.17.15", "tmp-promise": "^3.0.2" } }, "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + "@noble/hashes": ["@noble/hashes@2.4.0", "", {}, "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA=="], + "@oxc-project/types": ["@oxc-project/types@0.128.0", "", {}, "sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ=="], "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.74.0", "", { "os": "android", "cpu": "arm" }, "sha512-+gHd12muVI9ZLBaWLPkHt3Fj7jihFjgQ1MGtBaRL8vWrWrI0P7dLUty/cHrHS0oqPYIRgQUJsPu2CExQuMcwNw=="], @@ -130,6 +153,14 @@ "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.74.0", "", { "os": "win32", "cpu": "x64" }, "sha512-VTC9IYTIMrVUk/i6Ms1ohzzDKZFkWn0KU2OBbPBzgmVZ2V30165T/zK4LztTr0Xgp9fZ1qQZ1rsZAu/rEmySlA=="], + "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.9.4", "", { "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg=="], + + "@peculiar/json-schema": ["@peculiar/json-schema@1.1.12", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w=="], + + "@peculiar/utils": ["@peculiar/utils@2.0.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ=="], + + "@peculiar/webcrypto": ["@peculiar/webcrypto@1.7.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/json-schema": "^1.1.12", "@peculiar/utils": "^2.0.2", "tslib": "^2.8.1", "webcrypto-core": "^1.9.2" } }, "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ=="], + "@pierre/diffs": ["@pierre/diffs@1.2.12", "", { "dependencies": { "@pierre/theme": "1.1.0", "@pierre/theming": "0.0.2", "@shikijs/transformers": "^3.0.0 || ^4.0.0", "diff": "9.0.0", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0 || ^4.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-pY/gmgWL03WnagqCyCnBi3QtRXUv4hCIY6FYqd5b1ZGaoI6a4Bsji8j+yRl2RfzPh/8Hf19rCl1GE80G6a1cLQ=="], "@pierre/theme": ["@pierre/theme@1.1.0", "", {}, "sha512-GC2OWTAfTIIWWYhPCygwG8t2EtePQkRfON4MI2rwIkJylmiyqIttJID2dCL8sUD8cNdEvYkEyfEHHKMeCiDLoQ=="], @@ -206,10 +237,14 @@ "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], + "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + "@types/fs-extra": ["@types/fs-extra@9.0.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA=="], + "@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="], @@ -224,6 +259,8 @@ "@types/mdurl": ["@types/mdurl@2.0.0", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="], + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + "@types/node": ["@types/node@26.1.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw=="], "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], @@ -254,26 +291,62 @@ "@vitest/utils": ["@vitest/utils@4.1.10", "", { "dependencies": { "@vitest/pretty-format": "4.1.10", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA=="], + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.15", "", {}, "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA=="], + + "abbrev": ["abbrev@4.0.0", "", {}, "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA=="], + + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "app-builder-lib": ["app-builder-lib@26.15.4", "", { "dependencies": { "@electron/asar": "3.4.1", "@electron/fuses": "^1.8.0", "@electron/get": "^3.0.0", "@electron/notarize": "2.5.0", "@electron/osx-sign": "1.3.3", "@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.18.0", "asn1js": "^3.0.10", "async-exit-hook": "^2.0.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.3.4", "dotenv": "^16.4.5", "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", "electron-publish": "26.15.3", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "isbinaryfile": "^5.0.0", "jiti": "^2.4.2", "js-yaml": "^4.1.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.0", "semver": "~7.7.3", "tar": "^7.5.7", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0", "unzipper": "^0.12.3", "which": "^5.0.0" }, "peerDependencies": { "dmg-builder": "26.15.4", "electron-builder-squirrel-windows": "26.15.4" } }, "sha512-GQdy7Cc5Vx2QnWP+JL5nEDqGXyeoJlqa5gtdXM6JPtb4yL5iffQhC5bbMZqxEcg0i8nRxPh3ltBPy6uZpW4uRg=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + "asn1js": ["asn1js@3.0.10", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.5", "tslib": "^2.8.1" } }, "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg=="], + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-exit-hook": ["async-exit-hook@2.0.1", "", {}, "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw=="], + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], + + "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], + "axios": ["axios@1.16.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } }, "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w=="], + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], + "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], + "brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="], + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "builder-util": ["builder-util@26.15.3", "", { "dependencies": { "@types/debug": "^4.1.6", "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "cross-spawn": "^7.0.6", "debug": "^4.3.4", "fs-extra": "^10.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "js-yaml": "^4.1.0", "sanitize-filename": "^1.6.3", "source-map-support": "^0.5.19", "stat-mode": "^1.0.0", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0" } }, "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw=="], + + "builder-util-runtime": ["builder-util-runtime@9.7.0", "", { "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" } }, "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw=="], + + "bytestreamjs": ["bytestreamjs@2.0.1", "", {}, "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ=="], + "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="], "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="], @@ -290,6 +363,12 @@ "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + + "chromium-pickle-js": ["chromium-pickle-js@0.2.0", "", {}, "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw=="], + + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], @@ -302,10 +381,22 @@ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], + + "compare-version": ["compare-version@0.1.2", "", {}, "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="], "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "cross-dirname": ["cross-dirname@0.1.0", "", {}, "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], "css.escape": ["css.escape@1.5.1", "", {}, "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="], @@ -338,12 +429,32 @@ "diff": ["diff@9.0.0", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="], + "dir-compare": ["dir-compare@4.2.0", "", { "dependencies": { "minimatch": "^3.0.5", "p-limit": "^3.1.0 " } }, "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ=="], + + "dmg-builder": ["dmg-builder@26.15.4", "", { "dependencies": { "app-builder-lib": "26.15.4", "builder-util": "26.15.3", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0" } }, "sha512-YARkRSxB9tqKETexq2sU7uVvDcIBqiOTMSmjnE2dzZ3m1ynbPUSMBawmZTd6OUQ8mYW4UtbBwaBz9ydJpa1A6w=="], + "dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], + + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + "electron": ["electron@41.5.1", "", { "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^24.9.0", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js" } }, "sha512-l3sIu10LcXe38iNZMfTR4EKmVc1K3Luw5HBfjvd2xszj6DHhU4yuXqlb1wtSAt1+7QY817w/be59bIkaFLLUBA=="], + "electron-builder": ["electron-builder@26.15.4", "", { "dependencies": { "app-builder-lib": "26.15.4", "builder-util": "26.15.3", "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "dmg-builder": "26.15.4", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" }, "bin": { "electron-builder": "./cli.js", "install-app-deps": "./install-app-deps.js" } }, "sha512-b1wugxc5lj9HO1SKxDUeMj9JPim/7CKB3hqqhwy5iH6ctu8SdIyf98qnKaPiu2rmgq37Zg+r4PlFQRtDUE4XeA=="], + + "electron-builder-squirrel-windows": ["electron-builder-squirrel-windows@26.15.4", "", { "dependencies": { "app-builder-lib": "26.15.4", "builder-util": "26.15.3", "electron-winstaller": "5.4.0" } }, "sha512-6mnJvyWa6GYkYklKDMHJihgKfTjd2umE5Tj//hhnzrh1XIljfbzAuVk/286i0YSL7ZMB1vlxcHmE5HEntccrJA=="], + + "electron-publish": ["electron-publish@26.15.3", "", { "dependencies": { "@types/fs-extra": "^9.0.11", "aws4": "^1.13.2", "builder-util": "26.15.3", "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "form-data": "^4.0.5", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" } }, "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q=="], + + "electron-winstaller": ["electron-winstaller@5.4.0", "", { "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", "temp": "^0.9.0" }, "optionalDependencies": { "@electron/windows-sign": "^1.1.2" } }, "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg=="], + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], @@ -352,6 +463,8 @@ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], @@ -372,17 +485,27 @@ "expect-type": ["expect-type@1.4.0", "", {}, "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA=="], + "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="], + "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-uri": ["fast-uri@3.1.8", "", {}, "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg=="], + "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "filelist": ["filelist@1.0.6", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA=="], + "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], - "fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -396,6 +519,8 @@ "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], @@ -420,34 +545,62 @@ "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + "hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], + "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "isbinaryfile": ["isbinaryfile@5.0.7", "", {}, "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ=="], + + "isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], + + "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], + + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], + "joi": ["joi@18.2.1", "", { "dependencies": { "@hapi/address": "^5.1.1", "@hapi/formula": "^3.0.2", "@hapi/hoek": "^11.0.7", "@hapi/pinpoint": "^2.0.1", "@hapi/tlds": "^1.1.1", "@hapi/topo": "^6.0.2", "@standard-schema/spec": "^1.1.0" } }, "sha512-2/OKlogiESf2Nh3TFCrRjrr9z1DRHeW0I+KReF67+4J0Ns+8hBtHRmoWAZ2OFU6I5+TWLEe6sVlSdXPjHm5UbQ=="], "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "js-yaml": ["js-yaml@4.3.2", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA=="], + "jsdom": ["jsdom@29.1.1", "", { "dependencies": { "@asamuzakjp/css-color": "^5.1.11", "@asamuzakjp/dom-selector": "^7.1.1", "@bramus/specificity": "^2.4.2", "@csstools/css-syntax-patches-for-csstree": "^1.1.3", "@exodus/bytes": "^1.15.0", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.3.5", "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.1", "undici": "^7.25.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.1", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q=="], "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], - "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + "lazy-val": ["lazy-val@1.0.5", "", {}, "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], @@ -508,6 +661,8 @@ "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + "mime": ["mime@2.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="], + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], @@ -516,12 +671,30 @@ "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], + "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], + + "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], + "node-abi": ["node-abi@4.35.0", "", { "dependencies": { "semver": "^7.6.3" } }, "sha512-ymk4aIzxdPopw2giv8Fs1Ec6vybGkjmyxUwVqhkI4MCy2tVfXdkOGGWieWVjL0THgH+7a8lRdevyupoYj3Js/Q=="], + + "node-api-version": ["node-api-version@0.2.1", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q=="], + + "node-gyp": ["node-gyp@12.4.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "undici": "^6.25.0", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw=="], + + "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], + + "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], + "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], @@ -538,24 +711,46 @@ "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "parse5": ["parse5@8.0.1", "", { "dependencies": { "entities": "^8.0.0" } }, "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw=="], + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + "pe-library": ["pe-library@0.4.1", "", {}, "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw=="], + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "pkijs": ["pkijs@3.4.0", "", { "dependencies": { "@noble/hashes": "1.4.0", "asn1js": "^3.0.6", "bytestreamjs": "^2.0.1", "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw=="], + "playwright-core": ["playwright-core@1.61.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg=="], + "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], + "postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="], + "postject": ["postject@1.0.0-alpha.6", "", { "dependencies": { "commander": "^9.4.0" }, "bin": { "postject": "dist/cli.js" } }, "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A=="], + "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], + "proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], + + "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], + "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], @@ -566,6 +761,10 @@ "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], + "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], + + "pvutils": ["pvutils@1.2.0", "", {}, "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg=="], + "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], "react": ["react@19.2.6", "", {}, "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q=="], @@ -574,6 +773,10 @@ "react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], + "read-binary-file-arch": ["read-binary-file-arch@1.0.6", "", { "dependencies": { "debug": "^4.3.4" }, "bin": { "read-binary-file-arch": "cli.js" } }, "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg=="], + + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], @@ -586,16 +789,28 @@ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + "resedit": ["resedit@1.7.2", "", { "dependencies": { "pe-library": "^0.4.1" } }, "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA=="], + "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], + "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + + "rimraf": ["rimraf@2.6.3", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="], + "roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="], "rolldown": ["rolldown@1.0.0-rc.18", "", { "dependencies": { "@oxc-project/types": "=0.128.0", "@rolldown/pluginutils": "1.0.0-rc.18" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.18", "@rolldown/binding-darwin-arm64": "1.0.0-rc.18", "@rolldown/binding-darwin-x64": "1.0.0-rc.18", "@rolldown/binding-freebsd-x64": "1.0.0-rc.18", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.18", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.18", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.18", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.18", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.18", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.18", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg=="], "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "sanitize-filename": ["sanitize-filename@1.6.4", "", { "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg=="], + + "sax": ["sax@1.6.1", "", {}, "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="], + "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], @@ -606,24 +821,40 @@ "serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], "shiki": ["shiki@4.3.1", "", { "dependencies": { "@shikijs/core": "4.3.1", "@shikijs/engine-javascript": "4.3.1", "@shikijs/engine-oniguruma": "4.3.1", "@shikijs/langs": "4.3.1", "@shikijs/themes": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw=="], "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + "stat-mode": ["stat-mode@1.0.0", "", {}, "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg=="], + "std-env": ["std-env@4.2.0", "", {}, "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw=="], "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -636,6 +867,14 @@ "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + "tar": ["tar@7.5.22", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="], + + "temp": ["temp@0.9.4", "", { "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" } }, "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA=="], + + "temp-file": ["temp-file@3.4.0", "", { "dependencies": { "async-exit-hook": "^2.0.1", "fs-extra": "^10.0.0" } }, "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg=="], + + "tiny-async-pool": ["tiny-async-pool@1.3.0", "", { "dependencies": { "semver": "^5.5.0" } }, "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA=="], + "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], @@ -648,6 +887,10 @@ "tldts-core": ["tldts-core@7.4.9", "", {}, "sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg=="], + "tmp": ["tmp@0.2.7", "", {}, "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw=="], + + "tmp-promise": ["tmp-promise@3.0.3", "", { "dependencies": { "tmp": "^0.2.0" } }, "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ=="], + "tough-cookie": ["tough-cookie@6.0.2", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA=="], "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], @@ -656,6 +899,8 @@ "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + "truncate-utf8-bytes": ["truncate-utf8-bytes@1.0.2", "", { "dependencies": { "utf8-byte-length": "^1.0.1" } }, "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], @@ -678,7 +923,13 @@ "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "unzipper": ["unzipper@0.12.5", "", { "dependencies": { "bluebird": "~3.7.2", "duplexer2": "~0.1.4", "fs-extra": "11.3.1", "graceful-fs": "^4.2.2", "node-int64": "^0.4.0" } }, "sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A=="], + + "utf8-byte-length": ["utf8-byte-length@1.0.5", "", {}, "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], @@ -692,12 +943,16 @@ "wait-on": ["wait-on@8.0.5", "", { "dependencies": { "axios": "^1.12.1", "joi": "^18.0.1", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" } }, "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag=="], + "webcrypto-core": ["webcrypto-core@1.9.2", "", { "dependencies": { "@peculiar/asn1-schema": "^2.7.0", "@peculiar/json-schema": "^1.1.12", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q=="], + "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], "whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], "whatwg-url": ["whatwg-url@16.0.1", "", { "dependencies": { "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", "webidl-conversions": "^8.0.1" } }, "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw=="], + "which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], + "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -706,18 +961,42 @@ "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], + "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@electron/asar/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "@electron/fuses/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "@electron/notarize/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "@electron/osx-sign/isbinaryfile": ["isbinaryfile@4.0.10", "", {}, "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw=="], + + "@electron/universal/fs-extra": ["fs-extra@11.3.1", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g=="], + + "@electron/universal/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + + "@electron/windows-sign/fs-extra": ["fs-extra@11.3.1", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g=="], + + "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "@testing-library/dom/aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], "@testing-library/dom/dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], @@ -730,20 +1009,66 @@ "@types/yauzl/@types/node": ["@types/node@24.12.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-8oljBDGun9cIsZRJR6fkihn0TSXJI0UDOOhncYaERq6M0JMDoPLxyscwruJcb4GKS6dvK/d8xebYBg27h/duaQ=="], + "app-builder-lib/@electron/get": ["@electron/get@3.1.0", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ=="], + + "app-builder-lib/ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + + "app-builder-lib/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "dir-compare/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "electron/@types/node": ["@types/node@24.12.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-8oljBDGun9cIsZRJR6fkihn0TSXJI0UDOOhncYaERq6M0JMDoPLxyscwruJcb4GKS6dvK/d8xebYBg27h/duaQ=="], + "electron-winstaller/fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], + + "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], + + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "global-agent/semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="], + "hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "node-abi/semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="], + + "node-api-version/semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="], + + "node-gyp/semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="], + + "node-gyp/undici": ["undici@6.28.1", "", {}, "sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA=="], + + "node-gyp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], + "parse5/entities": ["entities@8.0.0", "", {}, "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA=="], + "pkijs/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + + "postject/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.18", "", {}, "sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw=="], + "simple-update-notifier/semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="], + + "tiny-async-pool/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "unzipper/fs-extra": ["fs-extra@11.3.1", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g=="], + + "@electron/asar/minimatch/brace-expansion": ["brace-expansion@1.1.21", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw=="], + + "@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "@electron/universal/minimatch/brace-expansion": ["brace-expansion@2.1.7", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g=="], + "@types/cacheable-request/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@types/keyv/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -752,6 +1077,40 @@ "@types/yauzl/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "app-builder-lib/@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "app-builder-lib/@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "dir-compare/minimatch/brace-expansion": ["brace-expansion@1.1.21", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw=="], + + "electron-winstaller/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "electron-winstaller/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + "electron/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "filelist/minimatch/brace-expansion": ["brace-expansion@2.1.7", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.21", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw=="], + + "hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "node-gyp/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], + + "@electron/asar/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@electron/universal/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "app-builder-lib/@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "app-builder-lib/@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "dir-compare/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], } } diff --git a/docs/adr/0009-calver-releases.md b/docs/adr/0009-calver-releases.md index 932fc4b..3a2f448 100644 --- a/docs/adr/0009-calver-releases.md +++ b/docs/adr/0009-calver-releases.md @@ -8,6 +8,7 @@ - **Consequences**: - Predictable, sortable, machine-friendly tags. - No "is this a breaking change" ceremony — every push to main tags a release. - - Dropped `release-please` (semver, PR-based) for a small workflow that just calls `gh release create --generate-notes`. - - Inconsistent with Pi CLI semver — keep documentation clear that pidex tags are CalVer. + - Dropped `release-please` (semver, PR-based) for a small workflow that computes a CalVer tag. + - Inconsistent with Pi CLI semver. Keep documentation clear that pidex tags are CalVer. + - Installer artefacts and store manifests are attached to the same tag (see [0010](0010-distribution-channels.md)). - If we ever publish a public API, we revisit and add semver alongside. \ No newline at end of file diff --git a/docs/adr/0010-distribution-channels.md b/docs/adr/0010-distribution-channels.md new file mode 100644 index 0000000..e0711bd --- /dev/null +++ b/docs/adr/0010-distribution-channels.md @@ -0,0 +1,20 @@ +# ADR 0010 — Ship desktop installers and public package channels + +- **Status**: Accepted (2026-09-20) +- **Context**: Releases were CalVer tags with generated notes and no artefacts. Users had to clone the repo and run Electron from source. We need first-class desktop packages (macOS DMG, Windows NSIS, Linux AppImage/deb) plus the public channels people actually type (`brew`, `winget`, `docker pull`), without waiting on store review or code-signing certificates. + +- **Decision**: Package with electron-builder on a three-runner GitHub Actions matrix and attach stable-named artefacts to the existing CalVer GitHub release. Publish a Linux image to GHCR. Use [echohello-dev/homebrew-tap](https://github.com/echohello-dev/homebrew-tap) as the interim Homebrew tap (`brew tap echohello-dev/tap`), Winget manifest bucket, and Scoop bucket. Attach versioned manifests to each release; the tap copies them on a cron (or immediately when `TAP_TOKEN` is set). Do not submit to homebrew-cask or winget-pkgs from CI until a publisher token and signed builds exist. Do not host a WinGet REST / pre-indexed source: those need a signed MSIX or an Azure REST stack. + +- **Consequences**: + - Every push to `main` now spends matrix minutes building macOS, Windows, and Linux installers. That is the cost of "push and it ships". + - Artefact names omit the version (`pidex-mac-arm64.dmg`) so `releases/latest/download/...` stays stable. + - electron-builder wants semver; CalVer tags with leading zeros (`2026.08.09-2`) are mapped to `2026.8.9-2` for the packager and `2026.8.9.2` for Winget. + - Builds are unsigned. macOS Gatekeeper and Windows SmartScreen will warn until Developer ID / Authenticode certs are added via `CSC_*` secrets. + - Docker is a Linux/X11 fallback, not the daily-driver install. The app reads `~/.pi/agent/sessions` and expects a local Pi CLI. + - Official Homebrew and Winget directory listings remain a follow-up (manual PR plus, for Winget, a `WINGET_TOKEN`). The org tap is the supported install path until then. + - Snap, Flathub, Chocolatey, and the Mac / Microsoft stores are out of scope until there is signing and a store account. + +- **Follow-ups**: + - Apple Developer ID + notarization; Authenticode for NSIS. + - `electron-updater` once macOS builds are signed (Squirrel.Mac refuses unsigned updates). + - PR the cask into `homebrew/homebrew-cask` and the singleton into `microsoft/winget-pkgs`. diff --git a/docs/adr/README.md b/docs/adr/README.md index fe6e7fa..68427c1 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -21,4 +21,5 @@ Each ADR follows this shape: | [0006](0006-pi-runtime-rpc.md) | Pi runtime integration via JSONL RPC | Accepted | | [0007](0007-native-tab-bar.md) | Native tab bar with hidden-inset title bar | Accepted | | [0008](0008-pi-dev-design-system.md) | Adopt pi.dev design system for visual language | Accepted | -| [0009](0009-calver-releases.md) | Calendar-versioned releases via GitHub Actions | Accepted | \ No newline at end of file +| [0009](0009-calver-releases.md) | Calendar-versioned releases via GitHub Actions | Accepted | +| [0010](0010-distribution-channels.md) | Ship desktop installers and public package channels | Accepted | \ No newline at end of file diff --git a/docs/distribution.md b/docs/distribution.md new file mode 100644 index 0000000..a6aabee --- /dev/null +++ b/docs/distribution.md @@ -0,0 +1,75 @@ +# Distribution + +pidex ships from GitHub Releases on every push to `main`. Tags stay CalVer (`YYYY.0M.0D`, see [ADR 0009](adr/0009-calver-releases.md)). The packager matrix and public channels are [ADR 0010](adr/0010-distribution-channels.md). + +Builds are unsigned. First launch on macOS needs right-click → Open. Windows SmartScreen may ask you to keep the file. + +## GitHub Releases + +Stable artefact names, so `releases/latest/download/` always points at the current build. + +| File | Platform | +|---|---| +| `pidex-mac-arm64.dmg` | macOS Apple silicon | +| `pidex-mac-x64.dmg` | macOS Intel | +| `pidex-win-x64.exe` | Windows NSIS installer | +| `pidex-win-x64-portable.exe` | Windows portable | +| `pidex-linux-x64.AppImage` | Linux AppImage | +| `pidex-linux-x64.deb` | Debian / Ubuntu | +| `pidex.rb` | Versioned Homebrew cask | +| `echoHello.Pidex.yaml` | Winget singleton manifest | +| `pidex.json` | Scoop manifest | +| `SHA256SUMS.txt` | SHA-256 of the installers | + +## echohello-dev tap + +Official Homebrew and Winget directories are the follow-up. Until then, [echohello-dev/homebrew-tap](https://github.com/echohello-dev/homebrew-tap) is the package tap. It starts with a `version :latest` cask; after each pidex release a workflow copies the checksummed Homebrew / Winget / Scoop manifests into the tap. + +| Client | Command | +|---|---| +| Homebrew | `brew tap echohello-dev/tap && brew install --cask pidex` | +| Winget | `irm https://raw.githubusercontent.com/echohello-dev/homebrew-tap/main/winget/install-pidex.ps1 \| iex` | +| Scoop | `scoop bucket add echohello https://github.com/echohello-dev/homebrew-tap && scoop install pidex` | + +WinGet cannot `source add` a GitHub repo. It wants a signed pre-indexed cache or a REST API, so the tap is a manifest bucket plus an install script, not `winget source add`. The first Winget run may need `winget settings --enable LocalManifestFiles` in an elevated shell. + +This repo still has `Casks/pidex.rb` (`version :latest`) if you would rather `brew tap echohello-dev/pidex https://github.com/echohello-dev/pidex`. Prefer the org tap. + +A PR into `homebrew/homebrew-cask` and `microsoft/winget-pkgs` (`echoHello.Pidex`) is what retires the tap as the primary install path. + +## Docker + +The image is the unpacked Linux build. It needs an X11 or Wayland socket and your Pi session tree: + +```bash +$ docker pull ghcr.io/echohello-dev/pidex:latest +$ docker run --rm \ + -e DISPLAY \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -v "$HOME/.pi:/root/.pi" \ + ghcr.io/echohello-dev/pidex:latest +``` + +Prefer the AppImage or `.deb` on a real Linux desktop. Docker does not replace a local Pi CLI. + +## From source + +```bash +$ git clone git@github.com:echohello-dev/pidex.git && cd pidex +$ mise install +$ bun install +$ mise run package +``` + +`mise run package` builds installers for the platform you are on. CI builds all three. + +## Signing (not wired yet) + +| Secret | Effect | +|---|---| +| `CSC_LINK` + `CSC_KEY_PASSWORD` | electron-builder signs macOS / Windows when present | +| Apple notarization keys | Required before Gatekeeper stops warning | +| `WINGET_TOKEN` | Would let CI open the `winget-pkgs` PR | +| `TAP_TOKEN` | PAT with `repo` on `echohello-dev/homebrew-tap`; pidex dispatches `pidex-release` so the tap syncs immediately instead of waiting for the hourly cron | + +Leave them unset and the workflow publishes unsigned artefacts on purpose. diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 0000000..8f16f9e --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,64 @@ +appId: dev.echohello.pidex +productName: pidex +copyright: Copyright © echohello-dev +artifactName: ${productName}-${os}-${arch}.${ext} + +directories: + output: release + buildResources: build + +files: + - dist/**/* + - package.json + - assets/icon.png + +mac: + category: public.app-category.developer-tools + icon: assets/icon.png + target: + - target: dmg + arch: [arm64, x64] + - target: zip + arch: [arm64, x64] + hardenedRuntime: true + gatekeeperAssess: false + identity: null + entitlements: build/entitlements.mac.plist + entitlementsInherit: build/entitlements.mac.plist + +dmg: + artifactName: ${productName}-mac-${arch}.${ext} + +win: + icon: assets/icon.png + target: + - target: nsis + arch: [x64] + - target: portable + arch: [x64] + +nsis: + oneClick: true + perMachine: false + artifactName: ${productName}-win-${arch}.${ext} + +portable: + artifactName: ${productName}-win-${arch}-portable.${ext} + +linux: + icon: assets/icon.png + category: Development + synopsis: Desktop workbench for the Pi coding agent + target: + - target: AppImage + arch: [x64] + - target: deb + arch: [x64] + - target: dir + arch: [x64] + +appImage: + artifactName: ${productName}-linux-${arch}.${ext} + +deb: + artifactName: ${productName}-linux-${arch}.${ext} diff --git a/package.json b/package.json index b868406..fc486b8 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,17 @@ "name": "pidex", "version": "0.0.1", "private": true, - "license": "MIT", + "license": "Apache-2.0", + "description": "A desktop workbench for the Pi coding agent", + "author": "echohello-dev", + "homepage": "https://github.com/echohello-dev/pidex", "repository": "https://github.com/echohello-dev/pidex", "main": "dist/main/index.js", "scripts": { "dev": "mise run dev", "build": "mise run build", + "bundle": "mise run bundle", + "package": "mise run package", "start": "mise run start", "lint": "bunx oxlint src tests", "typecheck": "bunx tsc -p tsconfig.json --noEmit && bunx tsc -p tsconfig.main.json --noEmit && bunx tsc -p tsconfig.preload.json --noEmit", @@ -34,6 +39,7 @@ "@vitejs/plugin-react": "^6.0.0", "concurrently": "^9.1.0", "electron": "^41.0.0", + "electron-builder": "26.15.4", "jsdom": "^29.1.1", "oxlint": "^1.74.0", "playwright-core": "^1.61.1", diff --git a/scripts/build-logo.py b/scripts/build-logo.py index 0091355..7415c1b 100644 --- a/scripts/build-logo.py +++ b/scripts/build-logo.py @@ -8,6 +8,8 @@ Outputs: assets/logo.svg - horizontal lockup, transparent (composable) assets/logo.png - rasterized lockup at 800x400 for quick embedding + assets/icon.svg - 1024 square app icon (cube on bg-deep squircle) + assets/icon.png - rasterized icon at 1024x1024 for electron-builder """ from __future__ import annotations @@ -70,21 +72,25 @@ TEXT_WEIGHT = 500 -def build_logo_svg() -> str: - return f""" - - - - +# App icon: macOS-style squircle, cube centred. +ICON_SIZE = 1024 +ICON_RADIUS = 229 + + +def _cube_polygons() -> str: + return f""" - - - - + """ + + +def build_logo_svg() -> str: + return f""" + +{_cube_polygons()} pidex @@ -92,6 +98,17 @@ def build_logo_svg() -> str: """ +def build_icon_svg() -> str: + # Cube sits in a ~84x96 box around (60, 64). Scale so it fills ~70% of the squircle. + return f""" + + +{_cube_polygons()} + + +""" + + def render_png(svg: Path, png: Path, width: int) -> None: if not shutil.which("inkscape"): sys.exit("inkscape not found on PATH; install via brew install inkscape") @@ -118,6 +135,13 @@ def main() -> None: print(f"wrote {svg_path}") print(f"wrote {png_path}") + icon_svg = ASSETS / "icon.svg" + icon_png = ASSETS / "icon.png" + icon_svg.write_text(build_icon_svg()) + render_png(icon_svg, icon_png, ICON_SIZE) + print(f"wrote {icon_svg}") + print(f"wrote {icon_png}") + if __name__ == "__main__": main() \ No newline at end of file diff --git a/scripts/release-manifests.ts b/scripts/release-manifests.ts new file mode 100644 index 0000000..a394107 --- /dev/null +++ b/scripts/release-manifests.ts @@ -0,0 +1,165 @@ +/** + * Map CalVer release tags onto packager / store versions and write + * Homebrew, Winget, and Scoop manifests for a published GitHub release. + */ + +export type ReleaseVersions = { + tag: string; + semver: string; + winget: string; +}; + +export type ReleaseChecksums = { + 'pidex-mac-arm64.dmg'?: string; + 'pidex-mac-x64.dmg'?: string; + 'pidex-win-x64.exe'?: string; + 'pidex-linux-x64.AppImage'?: string; +}; + +const CALVER = /^(\d{4})\.(\d{2})\.(\d{2})(?:-(\d+))?$/; +const REPO = 'https://github.com/echohello-dev/pidex'; +const DOWNLOAD = `${REPO}/releases/download`; + +export function versionsFromCalver(tag: string): ReleaseVersions { + const match = tag.match(CALVER); + if (!match) { + throw new Error(`invalid calver tag: ${tag}`); + } + const year = Number(match[1]); + const month = Number(match[2]); + const day = Number(match[3]); + const suffix = match[4]; + const base = `${year}.${month}.${day}`; + return { + tag, + semver: suffix ? `${base}-${suffix}` : base, + winget: suffix ? `${base}.${suffix}` : base, + }; +} + +function requireSha(checksums: ReleaseChecksums, name: keyof ReleaseChecksums): string { + const sha = checksums[name]; + if (!sha) { + throw new Error(`missing checksum for ${name}`); + } + return sha.toLowerCase(); +} + +export function homebrewCask(tag: string, checksums: ReleaseChecksums): string { + versionsFromCalver(tag); + const arm = requireSha(checksums, 'pidex-mac-arm64.dmg'); + const intel = requireSha(checksums, 'pidex-mac-x64.dmg'); + return `cask "pidex" do + arch arm: "arm64", intel: "x64" + + version "${tag}" + sha256 arm: "${arm}", + intel: "${intel}" + + url "${DOWNLOAD}/#{version}/pidex-mac-\#{arch}.dmg" + name "pidex" + desc "Desktop workbench for the Pi coding agent" + homepage "${REPO}" + + depends_on macos: :sonoma + + app "pidex.app" + + zap trash: [ + "~/Library/Application Support/pidex", + "~/Library/Preferences/dev.echohello.pidex.plist", + "~/Library/Saved Application State/dev.echohello.pidex.savedState", + ] +end +`; +} + +export function wingetSingleton(tag: string, checksums: ReleaseChecksums): string { + const versions = versionsFromCalver(tag); + const sha = requireSha(checksums, 'pidex-win-x64.exe'); + return `# yaml-language-server: $schema=https://aka.ms/winget-manifest.singleton.1.9.0.schema.json +PackageIdentifier: echoHello.Pidex +PackageVersion: ${versions.winget} +PackageLocale: en-US +Publisher: echoHello +PublisherUrl: https://github.com/echohello-dev +PublisherSupportUrl: ${REPO}/issues +PackageName: pidex +PackageUrl: ${REPO} +License: Apache-2.0 +LicenseUrl: ${REPO}/blob/main/LICENSE +ShortDescription: Desktop workbench for the Pi coding agent +Moniker: pidex +Tags: + - electron + - pi + - coding-agent +ReleaseNotesUrl: ${REPO}/releases/tag/${tag} +Installers: + - Architecture: x64 + InstallerType: nullsoft + InstallerUrl: ${DOWNLOAD}/${tag}/pidex-win-x64.exe + InstallerSha256: ${sha.toUpperCase()} + Scope: user +ManifestType: singleton +ManifestVersion: 1.9.0 +`; +} + +export function scoopManifest(tag: string, checksums: ReleaseChecksums): string { + versionsFromCalver(tag); + const sha = requireSha(checksums, 'pidex-win-x64.exe'); + return `${JSON.stringify( + { + version: tag, + description: 'Desktop workbench for the Pi coding agent', + homepage: REPO, + license: 'Apache-2.0', + architecture: { + '64bit': { + url: `${DOWNLOAD}/${tag}/pidex-win-x64.exe`, + hash: sha, + }, + }, + bin: 'pidex.exe', + checkver: { + github: REPO, + }, + autoupdate: { + architecture: { + '64bit': { + url: `${DOWNLOAD}/$version/pidex-win-x64.exe`, + }, + }, + }, + }, + null, + 2, + )}\n`; +} + +export function latestHomebrewCask(): string { + return `cask "pidex" do + arch arm: "arm64", intel: "x64" + + version :latest + sha256 :no_check + + url "${REPO}/releases/latest/download/pidex-mac-\#{arch}.dmg" + name "pidex" + desc "Desktop workbench for the Pi coding agent" + homepage "${REPO}" + + depends_on macos: :sonoma + + app "pidex.app" + + zap trash: [ + "~/Library/Application Support/pidex", + "~/Library/Preferences/dev.echohello.pidex.plist", + "~/Library/Saved Application State/dev.echohello.pidex.savedState", + ] +end +`; +} + diff --git a/scripts/write-release-manifests.ts b/scripts/write-release-manifests.ts new file mode 100644 index 0000000..74ff476 --- /dev/null +++ b/scripts/write-release-manifests.ts @@ -0,0 +1,23 @@ +import { mkdirSync, writeFileSync } from 'node:fs'; +import { homebrewCask, scoopManifest, wingetSingleton, type ReleaseChecksums } from './release-manifests'; + +function parseArgs(argv: string[]): { tag: string; outDir: string; checksumsPath: string } { + const args: Record = {}; + for (let i = 0; i < argv.length; i += 1) { + const key = argv[i]; + if (!key.startsWith('--')) continue; + args[key.slice(2)] = argv[i + 1] ?? ''; + i += 1; + } + if (!args.tag || !args.out || !args.checksums) { + throw new Error('usage: bun scripts/write-release-manifests.ts --tag --out --checksums '); + } + return { tag: args.tag, outDir: args.out, checksumsPath: args.checksums }; +} + +const { tag, outDir, checksumsPath } = parseArgs(process.argv.slice(2)); +const checksums = (await Bun.file(checksumsPath).json()) as ReleaseChecksums; +mkdirSync(outDir, { recursive: true }); +writeFileSync(`${outDir}/pidex.rb`, homebrewCask(tag, checksums)); +writeFileSync(`${outDir}/echoHello.Pidex.yaml`, wingetSingleton(tag, checksums)); +writeFileSync(`${outDir}/pidex.json`, scoopManifest(tag, checksums)); diff --git a/src/main/index.ts b/src/main/index.ts index ab22f1f..5296557 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -41,6 +41,7 @@ function createWindow() { minWidth: 900, minHeight: 600, title: 'pidex', + icon: path.join(app.getAppPath(), 'assets', 'icon.png'), backgroundColor: '#0d1116', titleBarStyle: 'hiddenInset', trafficLightPosition: { x: 14, y: 14 }, diff --git a/tests/unit/release-manifests.test.ts b/tests/unit/release-manifests.test.ts new file mode 100644 index 0000000..4f2cb65 --- /dev/null +++ b/tests/unit/release-manifests.test.ts @@ -0,0 +1,81 @@ +import { readFileSync } from 'node:fs'; +import path from 'node:path'; +import { describe, expect, it } from 'vitest'; +import { + homebrewCask, + latestHomebrewCask, + scoopManifest, + versionsFromCalver, + wingetSingleton, +} from '../../scripts/release-manifests'; + +const checksums = { + 'pidex-mac-arm64.dmg': 'aaa'.repeat(21) + 'aa', + 'pidex-mac-x64.dmg': 'bbb'.repeat(21) + 'bb', + 'pidex-win-x64.exe': 'ccc'.repeat(21) + 'cc', + 'pidex-linux-x64.AppImage': 'ddd'.repeat(21) + 'dd', +}; + +describe('versionsFromCalver', () => { + it('maps a first-of-day tag onto semver and winget versions', () => { + expect(versionsFromCalver('2026.08.09')).toEqual({ + tag: '2026.08.09', + semver: '2026.8.9', + winget: '2026.8.9', + }); + }); + + it('maps a same-day suffix onto a semver prerelease and a dotted winget build', () => { + expect(versionsFromCalver('2026.08.09-2')).toEqual({ + tag: '2026.08.09-2', + semver: '2026.8.9-2', + winget: '2026.8.9.2', + }); + }); + + it('rejects a non-calver tag', () => { + expect(() => versionsFromCalver('v1.2.3')).toThrow(/invalid calver tag/); + }); +}); + +describe('release manifests', () => { + it('writes a versioned homebrew cask with per-arch checksums', () => { + const cask = homebrewCask('2026.08.09-2', checksums); + expect(cask).toContain('version "2026.08.09-2"'); + expect(cask).toContain(checksums['pidex-mac-arm64.dmg']); + expect(cask).toContain('pidex-mac-#{arch}.dmg'); + expect(cask).toContain('app "pidex.app"'); + }); + + it('keeps the tap cask pointed at latest/download', () => { + const cask = latestHomebrewCask(); + expect(cask).toContain('version :latest'); + expect(cask).toContain('sha256 :no_check'); + expect(cask).toContain('releases/latest/download/pidex-mac-#{arch}.dmg'); + const onDisk = readFileSync(path.join(process.cwd(), 'Casks/pidex.rb'), 'utf8'); + expect(onDisk).toBe(cask); + }); + + it('writes a winget singleton with the NSIS installer', () => { + const yaml = wingetSingleton('2026.08.09-2', checksums); + expect(yaml).toContain('PackageIdentifier: echoHello.Pidex'); + expect(yaml).toContain('Publisher: echoHello'); + expect(yaml).toContain('PackageVersion: 2026.8.9.2'); + expect(yaml).toContain('InstallerType: nullsoft'); + expect(yaml).toContain('pidex-win-x64.exe'); + expect(yaml).toContain(checksums['pidex-win-x64.exe'].toUpperCase()); + }); + + it('writes a scoop manifest that checkver can follow', () => { + const json = JSON.parse(scoopManifest('2026.08.09-2', checksums)) as { + version: string; + architecture: { '64bit': { hash: string } }; + }; + expect(json.version).toBe('2026.08.09-2'); + expect(json.architecture['64bit'].hash).toBe(checksums['pidex-win-x64.exe']); + }); + + it('fails closed when a required checksum is missing', () => { + expect(() => homebrewCask('2026.08.09', {})).toThrow(/missing checksum/); + }); +});