diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 5f55d04c2..dc25b3346 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -68,15 +68,15 @@ }, "devDependencies": { "@electron/asar": "4.3.1", - "@electron/osx-sign": "2.7.1", + "@electron/osx-sign": "2.7.2", "@fontsource-variable/inter": "5.3.0", "@playwright/test": "1.64.1", "@types/react": "^19.2.18", "@types/react-dom": "^19.2.4", "ajv": "8.20.0", "ajv-formats": "3.0.1", - "electron": "44.9.1", - "electron-builder": "^26.15.3", + "electron": "45.2.1", + "electron-builder": "26.18.0", "esbuild": "^0.28.1", "resedit": "3.1.0", "vite": "^8.2.1" diff --git a/apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs b/apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs index 760476042..509b2f116 100644 --- a/apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs +++ b/apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs @@ -4,7 +4,7 @@ import { createDarwinPlatformSigner } from "./darwin-platform-signer.mjs"; import { runProviderAwareSign } from "./hooks.mjs"; /** - * Electron Builder 26.15.3 `mac.sign` callback. Builder hands the callback a + * Pinned Electron Builder `mac.sign` callback. Builder hands the callback a * bundle path rather than an individual executable. The fixture/release * adapter records the outer main executable as the governed app identity; * the real macOS signer remains an injected platform service in Slice 6A. diff --git a/apps/desktop/scripts/cua-driver-signing/electron-builder-win-sign.mjs b/apps/desktop/scripts/cua-driver-signing/electron-builder-win-sign.mjs index 8b7fe4da1..347e04e0a 100644 --- a/apps/desktop/scripts/cua-driver-signing/electron-builder-win-sign.mjs +++ b/apps/desktop/scripts/cua-driver-signing/electron-builder-win-sign.mjs @@ -1,7 +1,7 @@ import { runProviderAwareSign } from "./hooks.mjs"; /** - * Electron Builder 26.15.3 `win.signtoolOptions.sign` callback. The callback + * Pinned Electron Builder `win.signtoolOptions.sign` callback. The callback * receives the exact file task that Builder is about to sign; the shared seam * either proves the sealed provider digest and skips it or delegates the outer * executable to the injected/release signer. diff --git a/apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs b/apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs index b1e0689d7..fc92f893f 100644 --- a/apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs +++ b/apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs @@ -29,6 +29,7 @@ import { import { SigningContractError } from "./signing-contract.mjs"; import { createDmgInputSnapshot } from "./dmg-input-snapshot.mjs"; import { createDmgAttachmentCustody } from "./dmg-attachment-custody.mjs"; +import { builderVersion } from "../distribution/installer-builder.mjs"; const require = createRequire(import.meta.url); const COMMAND_TIMEOUT_MS = 120_000; @@ -288,10 +289,10 @@ async function resolvePinnedSevenZip() { const electronBuilderRequire = createRequire(electronBuilderPackage); const appBuilderPackage = electronBuilderRequire.resolve("app-builder-lib/package.json"); const appBuilder = electronBuilderRequire(appBuilderPackage); - if (electronBuilder.version !== "26.15.3" || appBuilder.version !== "26.15.3") { + if (electronBuilder.version !== builderVersion || appBuilder.version !== builderVersion) { throw contractError( "final_artifact_builder_version_mismatch", - `Expected electron-builder/app-builder-lib 26.15.3, got ${String(electronBuilder.version)}/${String(appBuilder.version)}`, + `Expected electron-builder/app-builder-lib ${builderVersion}, got ${String(electronBuilder.version)}/${String(appBuilder.version)}`, ); } const pinnedRequire = createRequire(appBuilderPackage); diff --git a/apps/desktop/scripts/cua-driver-signing/hooks.mjs b/apps/desktop/scripts/cua-driver-signing/hooks.mjs index 95c639877..43d945e6a 100644 --- a/apps/desktop/scripts/cua-driver-signing/hooks.mjs +++ b/apps/desktop/scripts/cua-driver-signing/hooks.mjs @@ -5,6 +5,7 @@ import { fileURLToPath } from "node:url"; import { cuaDriverArtifactLayoutFor } from "../../shared/cua-driver-artifact-layout.mjs"; import { validateCuaDriverPackageAuthority } from "../../shared/cua-driver-package-authority-contract.mjs"; import { verifyCuaDriverPackagedHostAuthority } from "../cua-driver-package-host-authority.mjs"; +import { builderVersion } from "../distribution/installer-builder.mjs"; import { createDarwinPlatformSigner } from "./darwin-platform-signer.mjs"; import { createDisposableFixtureSigner, @@ -256,7 +257,7 @@ export async function runAfterPack(context, callOptions = {}) { } const state = { - electronBuilderVersion: "26.15.3", + electronBuilderVersion: builderVersion, platform, signingTier: profile.signingTier, distributionChannel: profile.distributionChannel, diff --git a/apps/desktop/scripts/cua-driver-signing/signing-trace.mjs b/apps/desktop/scripts/cua-driver-signing/signing-trace.mjs index bc14965ba..84957765b 100644 --- a/apps/desktop/scripts/cua-driver-signing/signing-trace.mjs +++ b/apps/desktop/scripts/cua-driver-signing/signing-trace.mjs @@ -2,6 +2,7 @@ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises"; import { dirname, join, resolve } from "node:path"; import { SigningContractError, canonicalJson, sha256Bytes } from "./signing-contract.mjs"; +import { builderVersion } from "../distribution/installer-builder.mjs"; const TRACE_FILE = "provider-signing-trace.json"; const STATE_FILE = "provider-signing-state.json"; @@ -75,7 +76,7 @@ async function appendSigningTraceSerially(directory, event) { const trace = { schemaVersion: 1, kind: "ling-cua-driver-signing-feasibility-trace", - electronBuilderVersion: "26.15.3", + electronBuilderVersion: builderVersion, events: [...events, normalized], }; await writeJsonAtomically(join(directory, TRACE_FILE), trace); diff --git a/apps/desktop/scripts/distribution/installer-builder.mjs b/apps/desktop/scripts/distribution/installer-builder.mjs index e2e15885a..18d4df119 100644 --- a/apps/desktop/scripts/distribution/installer-builder.mjs +++ b/apps/desktop/scripts/distribution/installer-builder.mjs @@ -3,7 +3,7 @@ import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpat import { createRequire } from "node:module"; import { dirname, join, resolve } from "node:path"; -export const builderVersion = "26.15.3"; +export const builderVersion = "26.18.0"; export const originalTemplates = Object.freeze({ "templates/nsis/installSection.nsh": "74c4dbb4163cdd90ca4850b75d304e916235c882d6af7b5cdad63bffbc977072", "templates/nsis/include/installer.nsh": "0e319437dd01dcbf911f3f48f664fde0cefbaef704f1cdb1739f63d563f5d4a0", diff --git a/apps/desktop/scripts/distribution/vendor-notices/nsis-source.json b/apps/desktop/scripts/distribution/vendor-notices/nsis-source.json index 1c4ace057..6a3421ca3 100644 --- a/apps/desktop/scripts/distribution/vendor-notices/nsis-source.json +++ b/apps/desktop/scripts/distribution/vendor-notices/nsis-source.json @@ -1,12 +1,12 @@ { "schemaVersion": 1, "component": "NSIS embedded zlib runtime and compiler headers", - "appBuilderLibVersion": "26.15.3", + "appBuilderLibVersion": "26.18.0", "toolsetModuleSha256": "a6e3009ca9680aec48646793289224a8df26cfb9c8dafba1e3b08323f09a331b", "releaseName": "nsis-3.0.4.1", "archive": "https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.1/nsis-3.0.4.1.7z", "archiveSha256": "9877df902530f96357d13a7a31ae2b9df67f48b11ffc9a1700a7c961574ec5fa", "licensePath": "COPYING", "licenseSha256": "3c8de989f6504d52f5f8dfafedb6668cd47201f5d01f1319570727c091425dd6", - "scope": "Original COPYING from the exact compiler archive selected by app-builder-lib 26.15.3. The private stock-template overlay retains stock upgrade/rollback and 7z extraction, replaces WinShell calls with MIT LingShell System/COM macros, and removes SpiderBanner display calls. StdUtils/nsis7z original paired source archives are supplied separately." + "scope": "Original COPYING from the exact compiler archive selected by app-builder-lib 26.18.0. The private stock-template overlay retains stock upgrade/rollback and 7z extraction, replaces WinShell calls with MIT LingShell System/COM macros, and removes SpiderBanner display calls. StdUtils/nsis7z original paired source archives are supplied separately." } diff --git a/apps/desktop/tests/cua-driver-signing-feasibility.test.mjs b/apps/desktop/tests/cua-driver-signing-feasibility.test.mjs index 77d9b0fc6..7138fe204 100644 --- a/apps/desktop/tests/cua-driver-signing-feasibility.test.mjs +++ b/apps/desktop/tests/cua-driver-signing-feasibility.test.mjs @@ -46,7 +46,7 @@ test.afterEach(() => { resetProviderSigningHooks(); }); -test("opt-in Electron Builder 26.15.3 fixture config wires both platform signing callbacks", async () => { +test("opt-in pinned Electron Builder fixture config wires both platform signing callbacks", async () => { const config = (await import("../scripts/cua-driver-signing/electron-builder.signing-feasibility.config.mjs?fixture=1")).default; assert.equal(config.afterPack, "./scripts/cua-driver-signing/after-pack.mjs"); assert.equal(config.afterSign, "./scripts/cua-driver-signing/after-sign.mjs"); diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 258cd82c6..dc1a3de0e 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -43,7 +43,7 @@ "@expo/dom-webview": "~58.0.2" }, "devDependencies": { - "expo-doctor": "1.21.4", + "expo-doctor": "1.21.5", "expo-mcp": "0.2.4", "react-dom": "19.3.0", "react-types-mobile": "npm:@types/react@19.3.0", diff --git a/docs/release/macos-source-review-2026-11-03.md b/docs/release/macos-source-review-2026-11-03.md new file mode 100644 index 000000000..bbb21d76f --- /dev/null +++ b/docs/release/macos-source-review-2026-11-03.md @@ -0,0 +1,110 @@ +# macOS development packaging dependency review, 2026-11-03 + +This review covers PR #633 at +`7f2fc754102f2c49e5e238ead027468f34da0023` plus its Builder compatibility +corrections, against main `b5713e56ccea5ab75c5c8450d4c8f275c20b1c70`. +It updates only the existing Darwin arm64, `unsigned_dev`, ad-hoc, +`provider=false` source prerequisite. It does not accept a final App, ZIP, DMG, +public signature, notarization, GUI behavior or release. + +## Compatibility review + +The seven proposed dependency updates are retained: Node types 26.6.6, +osx-sign 2.7.2, Electron 45.2.1, Electron Builder 26.18.0, Vite 8.3.5, +expo-doctor 1.21.5 and Babel parser 8.0.10. Builder is now pinned exactly to +26.18.0. Its installer, extractor and signing-trace consumers share the existing +version constant, while both Builder package-version checks remain strict. + +Independent Codex context `01a1a05f-591b-77a1-86de-2bf4f7e4300e` found no +blocking dependency-graph or Builder-integration defect in these exact bytes. +The structured lock audit covered 20 importers, 1,391 packages, 1,395 snapshots +and 3,123 transitive dependency edges, with no dangling reference. All 22 +overrides and nine security patches, including their hashes, remain intact. + +The four pinned NSIS templates and the Windows toolset module are byte-identical +between the two Builder versions. Their existing hash guards are unchanged. +The NSIS source receipt changes its Builder version reference only, retaining +the compiler archive and license hashes. The other NSIS template change adds +`-NoProfile -NonInteractive` to four PowerShell calls without changing the macro +interface or fallback. Both signing callback contracts remain compatible. +Squirrel remains outside this review: its existing 26.15.3 package is not used +by the current `dir`/NSIS path, and its peer-version mismatch is not accepted +as a tested Squirrel configuration. + +## Independent source and runtime decision + +Separate Codex context `01a1a065-bf2b-74a0-b649-ec0012776b23` independently +reviewed the exact record proposal and returned `SCOPED SOURCE-REVIEW PASS` +before either persistent record was changed. These are independent contexts +on the same model host, not human or cross-model approval. + +The source audit retains 43 roots and 1,706 unique fixed inputs. It parsed +1,630 authored files and reached 1,639, with no missing input, unresolved authored +import or parse error. The new version-constant imports target an already fixed +module, with no build-time approval discovery or new top-level write effect. +All 15 Office and 19 sandbox native input digests remain unchanged. + +The actual Electron runtime is 45.2.1, with embedded Node 24.22.1 and libuv +1.52.1, on Darwin arm64. Both records change only their Electron and Node +runtime fields. Compiler, SDK, headers, deployment target, OS rows, trust, +signing, approval fields and false/unbound safety axes are unchanged. + +The sandbox record was adopted first. The Office record then adopted exactly +the following ten existing packaging digest replacements. No key was added +or removed; the other 1,697 values are unchanged. + +| Existing packaging input | Approved SHA-256 | +| --- | --- | +| `apps/desktop/package.json` | `d8d064c0ea099c78d90b83462d90e590a9d5b4189eb997d0cee8f018cdd382f8` | +| `packages/core/src/provider-model-catalog.generated.ts` | `c02eaf49e0f4e79f94cb18734d2613a3e9c88e4ca1250d9b353dc0574f7c41e4` | +| `pnpm-lock.yaml` | `bea9a0f9bd2771063b97e1fd47f20aa43325670213909bcad06033e12fa2a1ad` | +| `packages/daemon/package.json` | `1f44188e8a668392c8573c011e1aa80e9d589cba7036d6a97315f5445c40898b` | +| `apps/desktop/scripts/distribution/installer-builder.mjs` | `4f67d19706b4f000a1ab90590932190fb6889803578d9bf0d9bfc38a7fab817d` | +| `apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs` | `7000392b8ca2f4151442773d8150fddcd1c758ab6ad5516a5a7dfdc098ea1ead` | +| `apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs` | `97e45821742403beaf936ebb5393633845b5be111e346266ec1f186af02efdc4` | +| `apps/desktop/scripts/cua-driver-signing/hooks.mjs` | `61a37e71e5f6df0b6113cc558eff86210dcf80eeb0d825d3060198d8eff7f76e` | +| `apps/desktop/scripts/cua-driver-signing/signing-trace.mjs` | `8d8403ecb6d2f3a8c9f7405d51535a61e3e048e4bd19d33cfeaa747ea380eb0e` | +| `native/sandbox/reviewed-codesign-source-v1.json` | `5e4e8cc68a68f4901244aa773ca04787805021f61c714ab64b52bf960c328572` | + +The adopted Office record SHA-256 is +`c974cf2253ac6d754c9f2cb7141032133d58d7bb0c5d1b17a5827c72b9c8806c`. +The fixed-order packaging aggregate is +`069e86b5b33420eacba6a4bf8280433a8245f52fe394cbf44d7e502e514f0c3b`. +The unchanged Office and sandbox native aggregates are respectively +`9c5f6a1a05fe63ab96de941432ec13166af8974ec52730934d5ac348c41a854e` +and `6770a6864706c68c41ed4998c826daeff7e33baf7d59d9d9cfca8a9b63da1dbd`. +Aggregates encode fixed-order `[path, sha256]` pairs as JSON plus a newline. + +## Verification and limits + +- Before adoption, the actual committed-form Office record test failed on the + stale Desktop manifest digest. After adoption, all 1,706 packaging inputs + and all native inputs match, and the exact record/field comparison permits + only the independently reviewed changes above. +- The actual strict Office reader, default local Office reader and codesign + reader accepted the final records and fresh native build evidence using the + already approved local Xcode/SDK/header profile, without observer mocks or + a new toolchain allowance. +- Office publication, codesign publication, authored-input and toolchain + contract tests passed 227/227 with no skips. Their disposable synthetic + compiler/signature cases do not establish final artifact acceptance. +- Fresh Office compilation passed. Primitive/publication/readback suites + passed 48/48 under standalone Node and 48/48 under actual Electron 45.2.1, + with equal before/after source fingerprints and no fixture residue. The + first Electron run passed 47/48 because its confined actor used a symlinked + Node path; that failed run was retained. Selecting the canonical standalone + actor path through the existing test-only setting resolved it without + changing source, tests or policy. +- The fresh sandbox build recorded 26 Rust passes and two existing ignored + cases. Protocol suites passed 19/19, 10/10 and 18/18. Actual restricted-command + dispatch with the fresh helper and Electron passed 15/15 without skips. +- Frozen dependency installation, the nine-package Daemon build graph and + Desktop CI typecheck passed. Dependency-security regressions passed 173/173; + release/extractor contracts passed 117/117. Installer/NSIS/signing-feasibility + tests passed 36 cases, with four existing Windows-only cases skipped on macOS. +- License policy passed for 1,282 versions across 23 families. Windows execution, + installer acceptance, complete hosted CI, final App/archive bytes, real signing, + notarization, clean-machine and GUI acceptance remain separate checks. + +No approval refresher, fallback reader, disabled guard or new safety capability +was introduced. Earlier reviews retain their historical snapshots and limits. diff --git a/native/office-local/reviewed-packaged-source-v1-review.md b/native/office-local/reviewed-packaged-source-v1-review.md index c7cdab3ad..0d61e411f 100644 --- a/native/office-local/reviewed-packaged-source-v1-review.md +++ b/native/office-local/reviewed-packaged-source-v1-review.md @@ -1,6 +1,6 @@ # Scoped macOS Development Packaging Review -Latest source/runtime rebinding: [2026-11-02 macOS development packaging review](../../docs/release/macos-source-review-2026-11-02.md). +Latest source/runtime rebinding: [2026-11-03 macOS development packaging review](../../docs/release/macos-source-review-2026-11-03.md). The dated reviews below retain their historical evidence and scope. Status: independently reviewed source prerequisite; final artifact acceptance separate diff --git a/native/office-local/reviewed-packaged-source-v1.json b/native/office-local/reviewed-packaged-source-v1.json index 508747d49..9de1c6902 100644 --- a/native/office-local/reviewed-packaged-source-v1.json +++ b/native/office-local/reviewed-packaged-source-v1.json @@ -35,7 +35,7 @@ "apps/desktop/scripts/engine-supervisor-package.mjs": "b2726052967bbd0735fe4c5371a566d519f9dc8eb1ab59b3de75e115570e82e7", "LICENSE": "b369b7547a372d61515d3ac92c231582e31043cb0bc0e62e39724a00cf568830", "apps/desktop/main/resource-paths.ts": "4170b6d41abb8bda7e75376d23f4691b1271b9dfc6a72a80543a11f331f12ae1", - "apps/desktop/package.json": "12d420c1ed401229bd93981fa900165f0c6353899261d16bcc7d8784a49910d1", + "apps/desktop/package.json": "d8d064c0ea099c78d90b83462d90e590a9d5b4189eb997d0cee8f018cdd382f8", "apps/desktop/scripts/build-packaged-daemon.mjs": "78e9f125f17aa76d72d1144ef17b96317d365017de5ab59591ab51e5383e94e2", "apps/desktop/scripts/build-packaged-office-native.mjs": "5977469bfaadeefa317191d04e944134426b2ed828713989e71ba77cd6a407dc", "apps/desktop/scripts/build-restricted-command-helper.mjs": "4e3841ce4a72e5dc218b14ab87f03d67f642a50bdb0624892b951ecfd60617f2", @@ -58,14 +58,14 @@ "apps/desktop/scripts/cua-driver-signing/darwin-platform-signer.mjs": "c4fcb9ea0c468bb5d8cc08a772e26467af414f5365b93aecdd1f8ecc55df3538", "apps/desktop/scripts/cua-driver-signing/dmg-attachment-custody.mjs": "bdba1977e0de2d1b06bae39ee466aacf90c2b85e460da73af990c1b2345d91b3", "apps/desktop/scripts/cua-driver-signing/dmg-input-snapshot.mjs": "db6339159cf33b6acb7ed56ef669a52f331c279ef7bb8a4a55bf090684bf0c6e", - "apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs": "bd0d776720c126ba65dce6f3c6a4996353f856befc2c3104f286ac8ac28a52b6", - "apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs": "b75fbb31c67da52df438839e06899490e68dfffa517ac5aad244d97e21bfcc62", + "apps/desktop/scripts/cua-driver-signing/electron-builder-mac-sign.mjs": "7000392b8ca2f4151442773d8150fddcd1c758ab6ad5516a5a7dfdc098ea1ead", + "apps/desktop/scripts/cua-driver-signing/final-artifact-extractor.mjs": "97e45821742403beaf936ebb5393633845b5be111e346266ec1f186af02efdc4", "apps/desktop/scripts/cua-driver-signing/fixture-signer.mjs": "382224e246f6b98123c54f732fe8e2de206849a00c66111c349761d726feb381", - "apps/desktop/scripts/cua-driver-signing/hooks.mjs": "530c274d2f52bf37caccbabd88347a0f9e2b8daffa29b44a090f427b5e43621a", + "apps/desktop/scripts/cua-driver-signing/hooks.mjs": "61a37e71e5f6df0b6113cc558eff86210dcf80eeb0d825d3060198d8eff7f76e", "apps/desktop/scripts/cua-driver-signing/provider-layout.mjs": "8b7da06cfa6ee17631b5b68ecff9bb39ea8ed696768654be5333705dcea67f34", "apps/desktop/scripts/cua-driver-signing/provider-seal.mjs": "2e2eddd84004be9a0fe06d5d62aaf3475c4e859df05248d64fb93a4619fdf5ad", "apps/desktop/scripts/cua-driver-signing/signing-contract.mjs": "901b77b720666ee7f1f564ebf557e4774821b0ff509b61eebd764dd582813d23", - "apps/desktop/scripts/cua-driver-signing/signing-trace.mjs": "d1c1fbce08b8afc2f7c388e5d948cc2f3960ef8f275bb10c49758dde296c68e2", + "apps/desktop/scripts/cua-driver-signing/signing-trace.mjs": "8d8403ecb6d2f3a8c9f7405d51535a61e3e048e4bd19d33cfeaa747ea380eb0e", "apps/desktop/scripts/cua-driver-source-build-lib.mjs": "6ba1e4f05439340ca11493bc4f80322fe9bdcab357b8d486b5957d0a22fd1da6", "apps/desktop/scripts/macos-development-signing.mjs": "336b21271cbb786a81bdaf3723a1d8d1a7c84b6e53cc866280b02408a0cebd6d", "apps/desktop/scripts/native/cua-driver-package-atomic-publish.cc": "5ae38dcacd8cb30f0083cff829d1e6e6bf5527b778be002e1d3605caf3d4d197", @@ -84,7 +84,7 @@ "native/office-local/scripts/build.mjs": "5e4cd3082c689439d5b8bd012c0d44a3e8e042718305118e6e895491c4cfc1ef", "native/sandbox/Cargo.lock": "290ca72ac99599eb21b54eb7ec449a1ec4ed90b459d71791bfa2385825da792d", "native/sandbox/Cargo.toml": "01870bf261735745ae72a5c908e70de0c2a097d7bf2033dd4bb0a04a87fe8984", - "native/sandbox/reviewed-codesign-source-v1.json": "40179954f462a0a3b20df46324d8db4b0e2830a1430aae761c3935a17a94b4ec", + "native/sandbox/reviewed-codesign-source-v1.json": "5e4e8cc68a68f4901244aa773ca04787805021f61c714ab64b52bf960c328572", "native/sandbox/rust-toolchain.toml": "3003a09987459e5921dcddde94f8ea929b2d5e66efbbc30160e9d78de7ff010a", "native/sandbox/scripts/build.mjs": "4be37f1916123df92c3c0d899de72104b0dedaed65f8a71aab1b78478a7121be", "native/sandbox/src/codesign.rs": "91b11c723933a4fc1560e06e5d4dcc3136dbb08b0ec715f19fe889d7edc8fe73", @@ -259,7 +259,7 @@ "packages/core/src/provider-generation-models.ts": "56a4a6b524c72e44cf47f25c023e6eb6916b78833d140e4b89cf7b1feb38f123", "packages/core/src/provider-media-normalization.ts": "c9f3988e8af8436b51bc473ed7207f9dbf9ee412421342104154a1d51d94a6d9", "packages/core/src/provider-model-capabilities.ts": "990ecb3d9eb5965fdc1c7c7c7032d0133699d708e622280e7741022239006ee6", - "packages/core/src/provider-model-catalog.generated.ts": "1efa56462207a1f38f393846596abaa092aa7f2a7270b6912ed1b18d85b86162", + "packages/core/src/provider-model-catalog.generated.ts": "c02eaf49e0f4e79f94cb18734d2613a3e9c88e4ca1250d9b353dc0574f7c41e4", "packages/core/src/provider-model-catalog.ts": "1cb12cb75c7a4723fb28f174141bec8d313c7e44e3b037e1a9ad92f80b749674", "packages/core/src/provider-runtime-availability-types.ts": "9b417bb1c4077afdc037ce225322eae44b104f52fa86dfc4595b9a3facc013ce", "packages/core/src/provider-templates.ts": "f1441161ab1d98af8aea45454a8e9ea674d9cb11a7a9f478afd874ffb2463617", @@ -1376,11 +1376,11 @@ "packages/runner-pi/src/types.ts": "aa77703718e2cb63588d755f10c8602ae763f8c716a8fb00d8d5d1ddf1e4c658", "packages/runner-pi/src/user-input-request.ts": "1020fb10883eb7166d8b886337120a9fca5ddf8e69c99221f2a27aad8f2d7f4d", "packages/runner-pi/src/utils.ts": "c994399e7a85bb6feea3710f0b744aee717d9d48c8484cdd1573e3215eb3d0b1", - "pnpm-lock.yaml": "2277ac3be1d2745c47e074561c66e9150b4c5f4d17dcd95d34fbdd74c0936735", + "pnpm-lock.yaml": "bea9a0f9bd2771063b97e1fd47f20aa43325670213909bcad06033e12fa2a1ad", "packages/browser-host/tsconfig.json": "ba10bae6415c98673a85ed99d9dc66da33bd0123c644b64856b44fa2a2dce053", "packages/contracts/tsconfig.json": "463f23957c8696dbce5c700e6bea9a925d360d9fb38e62f79ed8af7dcfabba47", "packages/core/tsconfig.json": "ba10bae6415c98673a85ed99d9dc66da33bd0123c644b64856b44fa2a2dce053", - "packages/daemon/package.json": "72ec2f4d9364649d83a3ecbd9e2e5b2b6b22cca28507d4e93f484b9f4d747c6e", + "packages/daemon/package.json": "1f44188e8a668392c8573c011e1aa80e9d589cba7036d6a97315f5445c40898b", "packages/daemon/tsconfig.json": "c21e6ed0df45934df795c951e772fe55366b8e655415d823c1e3220a7258274a", "packages/localization/tsconfig.json": "a14de6e8e5e3e178d0d9b732fa35667999d5a35eaef62a624821142c299e5df8", "packages/plugin-sdk/tsconfig.json": "463f23957c8696dbce5c700e6bea9a925d360d9fb38e62f79ed8af7dcfabba47", @@ -1519,7 +1519,7 @@ "packages/daemon/src/runtime/runner-acceptance.ts": "d5790797673095ab286b29880f8a58b72526e78f4e832f365cb73c3adc6cf6f5", "packages/daemon/src/runtime/sandbox/native-process-launch.ts": "329ee408f790d1e5a19aacc87a914e392813a13f1e544a37804cf30a72894c41", "packages/daemon/src/shared/html-text.ts": "7f60e054030a40f98cc4f9af2eff4e7f2cec62c6e8ccd01748ad6514b64478c2", - "apps/desktop/scripts/distribution/installer-builder.mjs": "f7c408d5ba05ee997cd8ff323d9b2f74af06d24f8303905ae6c3ba6546284883", + "apps/desktop/scripts/distribution/installer-builder.mjs": "4f67d19706b4f000a1ab90590932190fb6889803578d9bf0d9bfc38a7fab817d", "apps/desktop/scripts/distribution/LingShell.nsh": "869fce8f300a4d3a752ea5dafec591cb15d9fc6bd996224b97f26e0bf751adf3", "scripts/gstack/testsavant-model-cache.mjs": "1044b7239dd08a321bf8a839e3c72bab21843bcfcf28c929c0250266a217a1ed", "scripts/gstack/testsavant-model-pin.json": "811623586d295af6c9e378e414d31b755ae2247d8216818d9a24a9a33093e05b", @@ -1743,8 +1743,8 @@ "runtime": { "platform": "darwin", "architecture": "arm64", - "electron": "44.9.1", - "node": "24.22.0", + "electron": "45.2.1", + "node": "24.22.1", "uv": "1.52.1" }, "signing": { diff --git a/native/sandbox/reviewed-codesign-source-v1.json b/native/sandbox/reviewed-codesign-source-v1.json index 9de191f0a..37e59c685 100644 --- a/native/sandbox/reviewed-codesign-source-v1.json +++ b/native/sandbox/reviewed-codesign-source-v1.json @@ -28,8 +28,8 @@ "runtime": { "platform": "darwin", "architecture": "arm64", - "electron": "44.9.1", - "node": "24.22.0", + "electron": "45.2.1", + "node": "24.22.1", "uv": "1.52.1" }, "os": { diff --git a/packages/daemon/package.json b/packages/daemon/package.json index dca67c93b..64af12125 100644 --- a/packages/daemon/package.json +++ b/packages/daemon/package.json @@ -51,7 +51,7 @@ "zod": "4.6.7" }, "devDependencies": { - "@babel/parser": "8.0.7", + "@babel/parser": "8.0.10", "@types/pdf-parse": "1.1.5", "@types/proper-lockfile": "4.1.4", "@types/ws": "^8.5.13", diff --git a/packages/daemon/test/codex-owned-execution-diagnostic.test.ts b/packages/daemon/test/codex-owned-execution-diagnostic.test.ts new file mode 100644 index 000000000..3eb2cb49f --- /dev/null +++ b/packages/daemon/test/codex-owned-execution-diagnostic.test.ts @@ -0,0 +1,128 @@ +import assert from "node:assert/strict"; +import { spawn, type ChildProcess } from "node:child_process"; +import { EventEmitter, getEventListeners } from "node:events"; +import { mkdtemp, rm, writeFile } from "node:fs/promises"; +import { test, type TestContext } from "node:test"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { captureOwnedExecutionDiagnostic } from "./support/codex-owned-execution-diagnostic.ts"; + +function context() { + const abort = new AbortController(); + const hooks: (() => unknown)[] = []; + const records: string[] = []; + const t = { signal: abort.signal, after: (fn: () => unknown) => { hooks.push(fn); }, + diagnostic: (value: string) => { records.push(value); } } as unknown as TestContext; + return { t, abort, hooks, records }; +} + +test("owned execution diagnostics stay silent on success and detach before normal test abort", async () => { + const f = context(); + const child = new EventEmitter() as ChildProcess; + assert.equal(await captureOwnedExecutionDiagnostic(f.t, 8000, async diagnostic => { + diagnostic.begin("fixture_setup"); + diagnostic.observeChild(child); + f.t.after(() => { diagnostic.begin("fixture_cleanup"); diagnostic.end(); }); + return 42; + }), 42); + for (const hook of f.hooks) await hook(); + f.abort.abort(); + assert.deepEqual(f.records, []); + assert.deepEqual(child.eventNames(), []); + assert.deepEqual(getEventListeners(f.t.signal, "abort"), []); +}); + +test("body failures preserve the original error and bounded phase evidence without payloads", async () => { + const f = context(); + const child = new EventEmitter() as ChildProcess; + const secret = "private-owned-diagnostic-sentinel"; + const original = new Error(secret); + await assert.rejects(captureOwnedExecutionDiagnostic(f.t, 8000, async diagnostic => { + diagnostic.begin("sqlite_init"); + diagnostic.begin("spawn_call"); + diagnostic.observeChild(child); + child.emit("spawn"); + child.emit("message", { method: "initialize", params: { secret } }); + child.emit("message", { method: secret }); + child.emit("message", { method: "thread/start" }); + child.emit("message", { method: "turn/start" }); + diagnostic.begin("native_reap"); + child.emit("exit", 0, null); + child.emit("close", 0, null); + diagnostic.begin("assertions"); + throw original; + }), error => error === original); + f.abort.abort(); + assert.equal(f.records.length, 1); + assert.equal(f.records[0].includes(secret), false); + const record = JSON.parse(f.records[0]); + assert.equal(record.reason, "body_failure"); + assert.equal(record.timeoutMs, 8000); + assert.equal(record.activePhase, "assertions"); + assert.deepEqual(record.phases.map((phase: { phase: string }) => phase.phase), ["sqlite_init", "spawn_call", "native_reap", "assertions"]); + for (const phase of record.phases) { + assert.ok(phase.durationMs >= 0); + assert.ok(phase.cpuMs.user >= 0 && phase.cpuMs.system >= 0); + } + assert.deepEqual(Object.keys(record.marks), ["child_spawn", "initialize_request", "thread_start_request", "turn_start_request", "child_exit", "child_close"]); + assert.deepEqual(child.eventNames(), []); + assert.deepEqual(getEventListeners(f.t.signal, "abort"), []); +}); + +async function runProbe(mode: "success" | "timeout" | "sync-stall" | "cleanup-failure") { + const helper = new URL("./support/codex-owned-execution-diagnostic.ts", import.meta.url).href; + const source = `import { test } from 'node:test'; + import { setImmediate } from 'node:timers/promises'; + import { captureOwnedExecutionDiagnostic } from ${JSON.stringify(helper)}; + test('phase probe', { timeout: 40 }, t => captureOwnedExecutionDiagnostic(t, 40, async d => { + const keepAlive = setInterval(() => {}, 1000); + t.after(() => { + d.begin('fixture_cleanup'); + try { clearInterval(keepAlive); ${mode === "cleanup-failure" ? "throw new Error('cleanup sentinel');" : ""} d.end(); } + catch (error) { d.fail('cleanup_failure'); throw error; } + }); + d.begin('sqlite_init'); + ${mode === "sync-stall" ? "Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 80); d.begin('fixture_node_read'); await setImmediate();" : ""} + ${mode === "timeout" || mode === "sync-stall" ? "await new Promise(() => {});" : "d.end();"} + }));`; + const directory = await mkdtemp(join(tmpdir(), "ling-owned-diagnostic-")); + const file = join(directory, "probe.test.mjs"); + await writeFile(file, source); + const environment: NodeJS.ProcessEnv = { ...process.env, NODE_OPTIONS: "" }; + delete environment.NODE_TEST_CONTEXT; + return await new Promise<{ code: number | null; output: string }>((resolve, reject) => { + const child = spawn(process.execPath, ["--test", "--test-reporter=tap", file], + { stdio: ["ignore", "pipe", "pipe"], env: environment }); + let output = ""; + const limit = setTimeout(() => { child.kill("SIGKILL"); }, 5000); + child.stdout.on("data", chunk => { output += chunk; }); + child.stderr.on("data", chunk => { output += chunk; }); + child.once("error", reject); + child.once("close", code => { + clearTimeout(limit); + void rm(directory, { recursive: true, force: true }).then(() => resolve({ code, output }), reject); + }); + }); +} + +test("real runner success stays silent through cleanup and normal signal abortion", async () => { + const result = await runProbe("success"); + assert.equal(result.code, 0, result.output); + assert.equal(result.output.includes("codex_owned_execution_diagnostic_v1"), false); +}); + +for (const mode of ["timeout", "sync-stall", "cleanup-failure"] as const) { + test(`real runner ${mode} emits one failure diagnostic even when the body never settles`, async () => { + const result = await runProbe(mode); + assert.equal(result.code, 1, result.output); + const records = result.output.split("\n").filter(line => line.startsWith('# {"kind":"codex_owned_execution_diagnostic_v1"')); + assert.equal(records.length, 1, result.output); + const record = JSON.parse(records[0].slice(2)); + assert.equal(record.reason, mode === "cleanup-failure" ? "cleanup_failure" : "test_aborted"); + assert.equal(record.timeoutMs, 40); + assert.equal(record.activePhase, mode === "timeout" ? "sqlite_init" : mode === "sync-stall" ? "fixture_node_read" : "fixture_cleanup"); + if (mode === "sync-stall") assert.ok(record.phases.find((phase: { phase: string }) => phase.phase === "sqlite_init").durationMs >= 80); + if (mode !== "cleanup-failure") assert.match(result.output, /testTimeoutFailure/); + else assert.match(result.output, /cleanup sentinel/); + }); +} diff --git a/packages/daemon/test/codex-owned-execution.test.mjs b/packages/daemon/test/codex-owned-execution.test.mjs index 5f471e1da..b94082bd9 100644 --- a/packages/daemon/test/codex-owned-execution.test.mjs +++ b/packages/daemon/test/codex-owned-execution.test.mjs @@ -11,10 +11,12 @@ import { test } from "node:test"; import { createSqliteRunStore, DEFAULT_WORKSPACE_ID, ExecutionEngineProfileStore, resolveUserConfigPaths, toRuntimeAttemptFence } from "../../core/dist/index.js"; import { executeOwnedCodexTurn } from "../dist/runtime/adapters/codex/owned-execution.js"; import { codexConfigurationFingerprint } from "../dist/runtime/adapters/codex/journaled-lifecycle.js"; +import { captureOwnedExecutionDiagnostic } from "./support/codex-owned-execution-diagnostic.ts"; const now = () => new Date().toISOString(); const prompt = { input: [{ type: "text", text: "Owned execution fixture", text_elements: [] }] }; -async function fixture(t, scenario = "output-events", auth = {}) { +async function fixture(t, scenario = "output-events", auth = {}, diagnostic) { + diagnostic?.begin("fixture_setup"); const cwd = await realpath(await mkdtemp(join(tmpdir(), "ling-owned-codex-"))); const profileRoot = join(cwd, "profile-host"); await mkdir(profileRoot, { mode: 0o700 }); @@ -34,13 +36,19 @@ async function fixture(t, scenario = "output-events", auth = {}) { ? { ref, configured: true, value: currentSecret, status: { ref, kind: "local", configured: true } } : { ref, configured: false, status: { ref, kind: "local", configured: false, errorCode: "secret_missing" } }, }; + diagnostic?.begin("sqlite_init"); let store = createSqliteRunStore(cwd); + diagnostic?.begin("fixture_records"); const children = []; const commands = []; t.after(async () => { - for (const { child, closed } of children) { child.kill("SIGKILL"); await closed; } - for (const command of commands) await rm(command.options.cwd, { recursive: true, force: true }); - store.close(); profileStore.close(); await rm(cwd, { recursive: true, force: true }); + diagnostic?.begin("fixture_cleanup"); + try { + for (const { child, closed } of children) { child.kill("SIGKILL"); await closed; } + for (const command of commands) await rm(command.options.cwd, { recursive: true, force: true }); + store.close(); profileStore.close(); await rm(cwd, { recursive: true, force: true }); + diagnostic?.end(); + } catch (error) { diagnostic?.fail("cleanup_failure"); throw error; } }); const channel = store.createChannel({ name: "Native fixture", boundPath: cwd }, now()); const task = store.createTask({ channelId: channel.id, title: "Native fixture", prompt: "Test" }, now()); @@ -68,18 +76,25 @@ async function fixture(t, scenario = "output-events", auth = {}) { }; const requests = []; const launch = (executable, args, options) => { + diagnostic?.begin("spawn_call"); commands.push({ executable, args, options }); const child = spawn(process.execPath, [fileURLToPath(new URL("fixtures/codex-live-peer.mjs", import.meta.url))], { ...options, env: { ...options.env, LING_CODEX_PEER_SCENARIO: scenario, LING_CODEX_PEER_TURN_PREFIX: `${commands.length}-` }, stdio: [...options.stdio, "ipc"], }); + diagnostic?.observeChild(child); + diagnostic?.begin("handshake_to_turn_start"); const closed = once(child, "close"); children.push({ child, closed }); child.on("message", message => requests.push(message)); return child; }; + diagnostic?.begin("fixture_node_read"); + const executableBytes = await readFile(process.execPath); + diagnostic?.begin("fixture_node_hash"); const processInput = { executablePath: process.execPath, - executableDigest: createHash("sha256").update(await readFile(process.execPath)).digest("hex"), codexHome: home }; + executableDigest: createHash("sha256").update(executableBytes).digest("hex"), codexHome: home }; + diagnostic?.begin("fixture_ready"); const makeOptions = () => ({ store, reservation: reserveInput(), configuration, input: prompt, process: processInput, authentication: { store: profileStore, profile, secretResolver }, approvalPolicy: { policy: { toolDecisions: { bash: "ask", write: "ask", edit: "ask" }, allowedWritePaths: [cwd] } }, @@ -91,12 +106,22 @@ async function fixture(t, scenario = "output-events", auth = {}) { } test("owned execution launches native stdio and returns already-persisted output after child cleanup", { timeout: 8000 }, async t => { - const f = await fixture(t); + await captureOwnedExecutionDiagnostic(t, 8000, async diagnostic => { + const f = await fixture(t, "output-events", {}, diagnostic); + diagnostic.begin("fixture_reservation"); const options = f.makeOptions(); + diagnostic.begin("fixture_ready"); assert.equal(f.profile.configuration.secretRef, undefined); await assert.rejects(access(f.authPath), { code: "ENOENT" }); const streamed = []; - const result = await executeOwnedCodexTurn({ ...options, onEvent: event => streamed.push(event) }); + diagnostic.begin("pre_spawn_validation_including_digest"); + const result = await executeOwnedCodexTurn({ ...options, onEvent: event => { + if (event.type === "turn_start") diagnostic.begin("execute"); + else if (event.type === "turn_end") diagnostic.begin("native_reap"); + streamed.push(event); + } }); + diagnostic.mark("execution_returned"); + diagnostic.begin("assertions"); assert.equal(result.status, "completed"); assert.equal(f.store.getNativeSubmission(result.submissionId).status, "completed"); assert.deepEqual(f.store.listEvents(options.reservation.runId).map(event => event.id), streamed.map(event => event.id)); @@ -109,6 +134,7 @@ test("owned execution launches native stdio and returns already-persisted output assert.equal(f.commands[0].options.env.OPENAI_API_KEY, undefined); assert.ok(f.children[0].child.signalCode || f.children[0].child.exitCode !== null); assert.equal(f.requests.filter(request => request.method === "turn/start").length, 1); + }); }); for (const auth of [ diff --git a/packages/daemon/test/support/codex-owned-execution-diagnostic.ts b/packages/daemon/test/support/codex-owned-execution-diagnostic.ts new file mode 100644 index 000000000..f05afd9c8 --- /dev/null +++ b/packages/daemon/test/support/codex-owned-execution-diagnostic.ts @@ -0,0 +1,93 @@ +import type { ChildProcess } from "node:child_process"; +import type { TestContext } from "node:test"; + +type Phase = "fixture_setup" | "sqlite_init" | "fixture_records" | "fixture_node_read" | "fixture_node_hash" + | "fixture_reservation" | "fixture_ready" | "pre_spawn_validation_including_digest" | "spawn_call" + | "handshake_to_turn_start" | "execute" | "native_reap" | "assertions" | "fixture_cleanup"; +type Mark = "child_spawn" | "child_exit" | "child_close" | "initialize_request" | "thread_start_request" + | "thread_resume_request" | "turn_start_request" | "execution_returned"; +type Failure = "body_failure" | "test_aborted" | "cleanup_failure"; +type Context = Pick; +interface Timing { phase: Phase; startMs: number; endMs: number | null; cpu: NodeJS.CpuUsage } + +/** Test-only observation: no request payloads, auth, paths or stream data are retained. */ +export function createOwnedExecutionDiagnostic(t: Context, timeoutMs: number) { + const started = performance.now(); + const initialCpu = process.cpuUsage(); + const phases: Timing[] = []; + const marks: Partial> = {}; + const detach: (() => void)[] = []; + let active: Timing | undefined; + let disposed = false; + let reported = false; + const elapsed = () => performance.now() - started; + const cpuMs = (usage: NodeJS.CpuUsage) => ({ user: usage.user / 1000, system: usage.system / 1000 }); + const end = () => { + if (disposed || !active) return; + active.endMs = elapsed(); + active.cpu = process.cpuUsage(active.cpu); + active = undefined; + }; + const begin = (phase: Phase) => { + if (disposed) return; + end(); + active = { phase, startMs: elapsed(), endMs: null, cpu: process.cpuUsage() }; + phases.push(active); + }; + const mark = (name: Mark) => { if (!disposed && marks[name] === undefined) marks[name] = elapsed(); }; + const dispose = () => { + if (disposed) return; + disposed = true; + t.signal.removeEventListener("abort", aborted); + for (const remove of detach) remove(); + }; + const fail = (reason: Failure) => { + if (disposed || reported) return; + reported = true; + const elapsedMs = elapsed(); + t.diagnostic(JSON.stringify({ kind: "codex_owned_execution_diagnostic_v1", reason, timeoutMs, + elapsedMs, cpuMs: cpuMs(process.cpuUsage(initialCpu)), nodeVersion: process.version, + platform: process.platform, arch: process.arch, activePhase: active?.phase ?? null, + phases: phases.map(value => ({ phase: value.phase, startMs: value.startMs, endMs: value.endMs, + durationMs: (value.endMs ?? elapsedMs) - value.startMs, + cpuMs: cpuMs(value === active ? process.cpuUsage(value.cpu) : value.cpu) })), marks })); + dispose(); + }; + const aborted = () => fail("test_aborted"); + t.signal.addEventListener("abort", aborted, { once: true }); + const observeChild = (child: ChildProcess) => { + const spawned = () => mark("child_spawn"); + const exited = () => mark("child_exit"); + const closed = () => { mark("child_close"); if (active?.phase === "native_reap") end(); }; + const message = (value: unknown) => { + const method = value && typeof value === "object" && "method" in value ? value.method : undefined; + if (method === "initialize") mark("initialize_request"); + else if (method === "thread/start") mark("thread_start_request"); + else if (method === "thread/resume") mark("thread_resume_request"); + else if (method === "turn/start") mark("turn_start_request"); + }; + if (disposed) return; + child.once("spawn", spawned); + child.once("exit", exited); + child.once("close", closed); + child.on("message", message); + detach.push(() => { child.removeListener("spawn", spawned); child.removeListener("exit", exited); + child.removeListener("close", closed); child.removeListener("message", message); }); + }; + return { begin, end, mark, observeChild, fail, dispose }; +} + +export async function captureOwnedExecutionDiagnostic(t: Context, timeoutMs: number, + execute: (diagnostic: ReturnType) => Promise): Promise { + const diagnostic = createOwnedExecutionDiagnostic(t, timeoutMs); + try { + return await execute(diagnostic); + } catch (error) { + diagnostic.fail("body_failure"); + throw error; + } finally { + // Node also aborts successful tests; detach after fixture teardown, before that abort. + if (t.signal.aborted) diagnostic.dispose(); + else t.after(() => diagnostic.dispose()); + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28b36def8..c64864599 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,7 +66,7 @@ importers: devDependencies: '@types/node': specifier: ^26.1.2 - version: 26.6.5 + version: 26.6.6 acorn: specifier: 8.19.0 version: 8.19.0 @@ -125,8 +125,8 @@ importers: specifier: 4.3.1 version: 4.3.1 '@electron/osx-sign': - specifier: 2.7.1 - version: 2.7.1 + specifier: 2.7.2 + version: 2.7.2 '@fontsource-variable/inter': specifier: 5.3.0 version: 5.3.0 @@ -146,11 +146,11 @@ importers: specifier: 3.0.1 version: 3.0.1(ajv@8.20.0) electron: - specifier: 44.9.1 - version: 44.9.1 + specifier: 45.2.1 + version: 45.2.1 electron-builder: - specifier: ^26.15.3 - version: 26.15.3(electron-builder-squirrel-windows@26.15.3) + specifier: 26.18.0 + version: 26.18.0(electron-builder-squirrel-windows@26.15.3) esbuild: specifier: ^0.28.1 version: 0.28.2 @@ -159,7 +159,7 @@ importers: version: 3.1.0 vite: specifier: ^8.2.1 - version: 8.3.4(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + version: 8.3.5(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) apps/mobile: dependencies: @@ -225,8 +225,8 @@ importers: version: 4.30.0(react-native@0.88.1(@babel/core@7.29.7)(@types/react@19.3.0)(react@19.3.0))(react@19.3.0) devDependencies: expo-doctor: - specifier: 1.21.4 - version: 1.21.4 + specifier: 1.21.5 + version: 1.21.5 expo-mcp: specifier: 0.2.4 version: 0.2.4 @@ -302,13 +302,13 @@ importers: version: 19.3.0(@types/react@19.3.0) '@vitejs/plugin-react': specifier: ^6.0.5 - version: 6.1.2(babel-plugin-react-compiler@1.0.0)(vite@8.3.4(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 6.1.2(babel-plugin-react-compiler@1.0.0)(vite@8.3.5(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) fflate: specifier: ^0.8.2 version: 0.8.3 vite: specifier: ^8.2.1 - version: 8.3.4(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + version: 8.3.5(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) packages/api-client: dependencies: @@ -507,8 +507,8 @@ importers: version: 4.6.7 devDependencies: '@babel/parser': - specifier: 8.0.7 - version: 8.0.7 + specifier: 8.0.10 + version: 8.0.10 '@types/pdf-parse': specifier: 1.1.5 version: 1.1.5 @@ -832,12 +832,8 @@ packages: resolution: {integrity: sha512-snZbO7MEDOof+hvNa97EjEY7qD7h2kwvQr5AJC3ZhQudKW5dnej6k3kP9NQV88hJwaS8vDqRLFo9rivLEhle2g==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.29.7': - resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@8.0.6': - resolution: {integrity: sha512-+6HYEBnsDRZHJtUTAEfMQd0zMDqdFHS7C+5vAsEZqBUr3vEMWOWlHJ0Jz1gS8jJIlCvLsuA6ivmeoqzH936YcA==} + '@babel/helper-string-parser@8.0.8': + resolution: {integrity: sha512-fVM+gSuKbdv9cpmyRNh5EvsDHUZCdxQH3FdnFKSkNYHpbsn95bbrxm+ES3MVeQjcqwi2O5ur/DjLfmTQaO60ng==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.29.7': @@ -865,13 +861,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.29.8': - resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@8.0.7': - resolution: {integrity: sha512-UkDwEbPO1px2JQSrdh4qIgaH1JgG7GO/pFeJkpxhDxIETkT/QvGpnigXIw75ViHYPtIgKITmVUJqLjiO+JuWjA==} + '@babel/parser@8.0.10': + resolution: {integrity: sha512-h+ah2Kg0ne1Vii892dShj9gky9I5jPzkd8x4s/3xgN/P2bMWmHS3qq59tum3mCVjCBXI8uqfYyYtrfp1Mz6+1w==} engines: {node: ^22.18.0 || >=24.11.0} hasBin: true @@ -1120,12 +1111,8 @@ packages: resolution: {integrity: sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.8': - resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} - engines: {node: '>=6.9.0'} - - '@babel/types@8.0.6': - resolution: {integrity: sha512-c+xgSWboV2pdwXP67BUWDVRHi2BO5Q3KwxyFVs7taVTY+fsK47/L51ZXQoV9rozHJDNHvJ4v4WEsI/IlxV2l2A==} + '@babel/types@8.1.0': + resolution: {integrity: sha512-8V8aSTDx012YPmDQF30vrokyxVFdRAU2YBS2VzrnfLAGkP8floVnjckwgFcD0Jrvf6GWMSRdCrYVsk3tyMwZRg==} engines: {node: ^22.18.0 || >=24.11.0} '@borewit/text-codec@0.2.3': @@ -1167,8 +1154,8 @@ packages: resolution: {integrity: sha512-4obPOjgOD7g4mGSlngIvxyujC1UPdmyI9zdVthbr8GufacFEX+Ce0+scPgHg++k2xj5+QjESM2d5TxvIuzCVmg==} engines: {node: '>=22.19.0'} - '@electron-internal/extract-zip@1.0.5': - resolution: {integrity: sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==} + '@electron-internal/extract-zip@1.0.8': + resolution: {integrity: sha512-8iajeLFbzNwM0m3AsQZSZgYREWglAImyGvvFSWU34FgMW8sHlzdwj9QKvv9dgN7jMP591EFUF/sLOC3Jl9YIjQ==} engines: {node: '>=22.12.0'} '@electron/asar@3.4.1': @@ -1202,13 +1189,13 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - '@electron/osx-sign@2.7.1': - resolution: {integrity: sha512-VZ7Ei2PpqBxPU0Kf1evYSiQKCaluIy6t/DSlNpYZQX0z27KwNNHuJR1bz3Pqj1DIL5EySD8RlH2PRrsrfLEdKg==} + '@electron/osx-sign@2.7.2': + resolution: {integrity: sha512-BD5ZyKDzzC1PLzWQCl1nw+X2/ErRCJGEIPwtjfOnCH+8KRLfBe/Vr9khUuEJC5bbrVACl8uO2Q2O/UqOzrcFgw==} engines: {node: '>=22.12.0'} hasBin: true - '@electron/rebuild@4.2.0': - resolution: {integrity: sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==} + '@electron/rebuild@4.2.1': + resolution: {integrity: sha512-IS4pG3BysRrCLJ8xTAfvg+IQDbiUoAzdJy2SfjcYKnLDy5DpCdjnPdhS5Zf5UMfrkB24xu0KC+TqcOxg+eG+6w==} engines: {node: '>=22.12.0'} hasBin: true @@ -1893,12 +1880,12 @@ packages: resolution: {integrity: sha512-9i1SR6tYeQ3o1beLeVMxhN6Fq513m9TZlTs+46+4JgvSNkaFoW9S4WrpV5MjzE+0CzVoC+dZ4RfZDIgW6+afnQ==} engines: {node: '>= 10'} - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} - '@noble/hashes@2.2.0': - resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + '@noble/hashes@2.4.0': + resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==} engines: {node: '>= 20.19.0'} '@noxcturnal/noxcturnal-darwin-arm64@0.1.11': @@ -1953,14 +1940,15 @@ packages: resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@oxc-project/types@0.153.0': - resolution: {integrity: sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==} - '@oxc-project/types@0.154.0': resolution: {integrity: sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==} - '@peculiar/asn1-schema@2.8.0': - resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} + '@oxc-project/types@0.156.0': + resolution: {integrity: sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==} + + '@peculiar/asn1-schema@2.11.1': + resolution: {integrity: sha512-jaU9OaCcbZUdyXx9hMETZB9xoNmxTGjOGFqd3cOwKFkpKnyKd9WxF3uqj4PvX4cyOMP9bSdHg5YyML2qtx/d/g==} + engines: {node: '>=14'} '@peculiar/json-schema@1.1.12': resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} @@ -1969,8 +1957,8 @@ packages: '@peculiar/utils@2.0.3': resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} - '@peculiar/webcrypto@1.7.1': - resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} + '@peculiar/webcrypto@1.7.2': + resolution: {integrity: sha512-ktTSACRJ5WdpfjHjFT2EWJQQPacGv1cPCDfEbdmpAHOxdFiYqPe4lfnXGA3D8Dg9/0kHPYSvyRlgujIOVlTdvQ==} engines: {node: '>=14.18.0'} '@playwright/test@1.64.1': @@ -2501,92 +2489,92 @@ packages: '@react-navigation/routers@7.6.5': resolution: {integrity: sha512-hpvpVFt6wu3U014F/0Qy45VZCErlUvIV8kN1L6HovN5P9OpbXAzFTaRQmG7VW6czg2tSkUL5S3dZA0HIu5QirQ==} - '@rolldown/binding-android-arm-eabi@1.2.13': - resolution: {integrity: sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==} + '@rolldown/binding-android-arm-eabi@1.2.16': + resolution: {integrity: sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rolldown/binding-android-arm64@1.2.13': - resolution: {integrity: sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==} + '@rolldown/binding-android-arm64@1.2.16': + resolution: {integrity: sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.13': - resolution: {integrity: sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==} + '@rolldown/binding-darwin-arm64@1.2.16': + resolution: {integrity: sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.13': - resolution: {integrity: sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==} + '@rolldown/binding-darwin-x64@1.2.16': + resolution: {integrity: sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.13': - resolution: {integrity: sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==} + '@rolldown/binding-freebsd-x64@1.2.16': + resolution: {integrity: sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.13': - resolution: {integrity: sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + resolution: {integrity: sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.13': - resolution: {integrity: sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==} + '@rolldown/binding-linux-arm64-gnu@1.2.16': + resolution: {integrity: sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.2.13': - resolution: {integrity: sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==} + '@rolldown/binding-linux-arm64-musl@1.2.16': + resolution: {integrity: sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-ppc64-gnu@1.2.13': - resolution: {integrity: sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==} + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + resolution: {integrity: sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@rolldown/binding-linux-s390x-gnu@1.2.13': - resolution: {integrity: sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==} + '@rolldown/binding-linux-s390x-gnu@1.2.16': + resolution: {integrity: sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.2.13': - resolution: {integrity: sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==} + '@rolldown/binding-linux-x64-gnu@1.2.16': + resolution: {integrity: sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.2.13': - resolution: {integrity: sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==} + '@rolldown/binding-linux-x64-musl@1.2.16': + resolution: {integrity: sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.2.13': - resolution: {integrity: sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==} + '@rolldown/binding-openharmony-arm64@1.2.16': + resolution: {integrity: sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.13': - resolution: {integrity: sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==} + '@rolldown/binding-win32-arm64-msvc@1.2.16': + resolution: {integrity: sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.13': - resolution: {integrity: sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==} + '@rolldown/binding-win32-x64-msvc@1.2.16': + resolution: {integrity: sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2836,9 +2824,6 @@ packages: '@types/node@26.6.4': resolution: {integrity: sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==} - '@types/node@26.6.5': - resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} - '@types/node@26.6.6': resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} @@ -3122,6 +3107,13 @@ packages: dmg-builder: 26.15.3 electron-builder-squirrel-windows: 26.15.3 + app-builder-lib@26.18.0: + resolution: {integrity: sha512-lx+KkuCSZHcbECf4R3IAcC9VOFk0+cMUwljO63s5y8yqS1Lw0sRGmjPaWsPwP3zv3ohZYbMhUvjXeiQXXZhJXA==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.18.0 + electron-builder-squirrel-windows: 26.18.0 + archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -3150,8 +3142,8 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1js@3.0.10: - resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + asn1js@3.1.0: + resolution: {integrity: sha512-HWYi1THkOqguCiO+vwj09ZkQFD2kKEsejYHAYCtX0D80WVdoDnvRc9IukXX/jeb0T9NRWJnRtqwdbHltnFjwXA==} engines: {node: '>=12.0.0'} async-exit-hook@2.0.1: @@ -3330,6 +3322,10 @@ packages: resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} engines: {node: '>=14.0.0'} + builder-util@26.16.0: + resolution: {integrity: sha512-RLyJhB7Si3YkzKR9ubQslWuXW3Vhs3CGe1i+SeixBZ0qTd1mk3XBmssvY22TlB6CS5blyko8Gu1JzpYk8UkYAg==} + engines: {node: '>=14.0.0'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3839,8 +3835,8 @@ packages: dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - dmg-builder@26.15.3: - resolution: {integrity: sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==} + dmg-builder@26.18.0: + resolution: {integrity: sha512-ozCGC54wi2C1RkS2v69y9lQxvoQ1Coh+iT8CmWiyY8y1ZuOKVvuNson2Hd+HEOs9+EZNNsOBbzKgQZ4SNqWd0w==} dnssd-advertise@1.1.6: resolution: {integrity: sha512-Ndrrf6BMPalkQPd/zubL+4YghH2J9NspapQ09uDXwYbvOPkP0oaqf5CkcwJ0b50kS2O3ul6yVu+jz+RY62Cejg==} @@ -3884,14 +3880,17 @@ packages: electron-builder-squirrel-windows@26.15.3: resolution: {integrity: sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==} - electron-builder@26.15.3: - resolution: {integrity: sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==} + electron-builder@26.18.0: + resolution: {integrity: sha512-ASgIuQnOq4RuD8jMhS9hI0LS3EMRT1I/M5R6utqifB/BHN80IcCjBdt+DED+NmNPvmBgEtrlExXZitNdA7kXOg==} engines: {node: '>=14.0.0'} hasBin: true electron-publish@26.15.3: resolution: {integrity: sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==} + electron-publish@26.18.0: + resolution: {integrity: sha512-MagnqaZSALSWjcdKu5HEVhYUZD/2BDL3q7XzrqWwub6gf/UfD3ItMgmthVDv9w5y9E0gH1C3JWqKaXwf6f4ROg==} + electron-to-chromium@1.5.448: resolution: {integrity: sha512-c3DEaf2iJbLz7XvmYGZQrzaxy6Azt2/NcWAV1r3GkibEyRNkVer6t3JevvwAQ6gW2JBGGY2N/MGMS/QV+77Ldw==} @@ -3902,8 +3901,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@44.9.1: - resolution: {integrity: sha512-x/tECFFDa2OFNjMObFH0EGKWrCnFZPOR1wP2iMIVt0STecGl8FmDXdaiaryY0kf8mtw9kSLP2yK8dfdaWkfDmw==} + electron@45.2.1: + resolution: {integrity: sha512-t433yuo8Kh8WG/mTStnPRT/NtpWw8A+caNLJgeU0tS/FlfOkeNEntFsac4ViLgDxZOmDe7BeSkOANVqrqNHhDA==} engines: {node: '>= 22.12.0'} hasBin: true @@ -4047,8 +4046,8 @@ packages: expo: '*' react-native: '*' - expo-doctor@1.21.4: - resolution: {integrity: sha512-JA2TeT7/o5WmSX+DHWkf4EfgdOsJ1RnRFX5OptlMXywo88j7T4IYPRRtM5ONVSvfGH/nL/3xBmhBgJ8t4fDE9w==} + expo-doctor@1.21.5: + resolution: {integrity: sha512-VH/G2zHnc0kNrvfx/kYOD1QaCr2DC3cLaAPw7MzySypPhAb6nsIKJurNDyasbhU3KknK931Kedc2zRLkfdMisA==} engines: {node: ^22.13.0 || ^24.3.0 || ^26.0.0 || >=27.0.0} hasBin: true @@ -4311,10 +4310,6 @@ packages: resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} - fs-extra@11.3.6: - resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} - engines: {node: '>=14.14'} - fs-extra@11.4.1: resolution: {integrity: sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==} engines: {node: '>=14.14'} @@ -5348,8 +5343,8 @@ packages: resolution: {integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==} engines: {node: '>=18'} - node-abi@4.33.0: - resolution: {integrity: sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==} + node-abi@4.40.0: + resolution: {integrity: sha512-GuvqvtrOk+AC27RidBxBsMzVNkwNl7PjHgc4NXbmdvSVLgIUjpaqcG1FjNRYnt2Yn9Ytq+Ln37XsBaglUcte/w==} engines: {node: '>=22.12.0'} node-api-version@0.2.1: @@ -5626,8 +5621,8 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} - pkijs@3.4.0: - resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + pkijs@3.4.3: + resolution: {integrity: sha512-V9kOzaItwDgqlryhXysQsAXUEKi5O7kqWUaP3dXI7MLvkPqWWMb4wVb1QAtmEDCKI+XIAINsZoNKMFF7sZb1eg==} engines: {node: '>=16.0.0'} playwright-core@1.64.1: @@ -5741,8 +5736,8 @@ packages: pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} - pvutils@1.1.5: - resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + pvutils@1.2.0: + resolution: {integrity: sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==} engines: {node: '>=16.0.0'} qrcode@1.5.4: @@ -5976,8 +5971,8 @@ packages: robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rolldown@1.2.13: - resolution: {integrity: sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==} + rolldown@1.2.16: + resolution: {integrity: sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -6008,10 +6003,6 @@ packages: sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} - sax@1.6.1: resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} @@ -6026,12 +6017,12 @@ packages: semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + semver@5.7.3: + resolution: {integrity: sha512-kM18BPOqTi0+TB68703/GJRpAML5Me+IDQsR1J26YB3EFKKNEyHIVZuWDX7+WKQB3tHwDwgk24BfhdpWUbytvQ==} hasBin: true - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + semver@6.3.2: + resolution: {integrity: sha512-GYrCADwpu6yV5OAvchkQ27Z5wwMxWAEMg5NNWjyHh/5DboFFqbdbvYNIvZouQpxXyeMPoTOh0vdPYKlf0ZswdQ==} hasBin: true semver@7.7.4: @@ -6044,6 +6035,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.6: + resolution: {integrity: sha512-9lpSSU4Mly3mrtruwLs1eLK6+gzbzqeBFwRNjIjE+9LuDpWdYctrQlQ3ej1Ilgi7gknpsTRnPoLP8DpCHqHIJw==} + engines: {node: '>=10'} + hasBin: true + send@0.19.2: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} @@ -6538,13 +6534,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@8.3.4: - resolution: {integrity: sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==} + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.7.1 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -7030,16 +7026,16 @@ snapshots: '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.12 '@babel/template': 7.29.7 '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.1 + semver: 6.3.2 transitivePeerDependencies: - supports-color @@ -7053,15 +7049,15 @@ snapshots: '@babel/generator@7.29.8': dependencies: - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 + '@babel/parser': 7.29.12 + '@babel/types': 7.29.11 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 '@babel/helper-compilation-targets@7.29.7': dependencies: @@ -7069,7 +7065,7 @@ snapshots: '@babel/helper-validator-option': 7.29.7 browserslist: 4.29.3 lru-cache: 5.1.1 - semver: 6.3.1 + semver: 6.3.2 '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': dependencies: @@ -7080,7 +7076,7 @@ snapshots: '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 '@babel/traverse': 7.29.8 - semver: 6.3.1 + semver: 6.3.2 transitivePeerDependencies: - supports-color @@ -7089,7 +7085,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 regexpu-core: 6.5.3 - semver: 6.3.1 + semver: 6.3.2 '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7)': dependencies: @@ -7107,14 +7103,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.29.7': dependencies: '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.29.7': dependencies: '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 transitivePeerDependencies: - supports-color @@ -7129,7 +7125,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 '@babel/helper-plugin-utils@7.29.7': {} @@ -7154,15 +7150,13 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.29.7': dependencies: '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.29.11': {} - '@babel/helper-string-parser@7.29.7': {} - - '@babel/helper-string-parser@8.0.6': {} + '@babel/helper-string-parser@8.0.8': {} '@babel/helper-validator-identifier@7.29.7': {} @@ -7174,26 +7168,22 @@ snapshots: dependencies: '@babel/template': 7.29.7 '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 transitivePeerDependencies: - supports-color '@babel/helpers@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 '@babel/parser@7.29.12': dependencies: '@babel/types': 7.29.11 - '@babel/parser@7.29.8': + '@babel/parser@8.0.10': dependencies: - '@babel/types': 7.29.8 - - '@babel/parser@8.0.7': - dependencies: - '@babel/types': 8.0.6 + '@babel/types': 8.1.0 '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7)': dependencies: @@ -7416,7 +7406,7 @@ snapshots: '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 transitivePeerDependencies: - supports-color @@ -7434,7 +7424,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7) babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7) - semver: 6.3.1 + semver: 6.3.2 transitivePeerDependencies: - supports-color @@ -7471,8 +7461,8 @@ snapshots: '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 + '@babel/parser': 7.29.12 + '@babel/types': 7.29.11 '@babel/traverse@7.29.12': dependencies: @@ -7491,9 +7481,9 @@ snapshots: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.12 '@babel/template': 7.29.7 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -7503,14 +7493,9 @@ snapshots: '@babel/helper-string-parser': 7.29.11 '@babel/helper-validator-identifier': 7.29.7 - '@babel/types@7.29.8': - dependencies: - '@babel/helper-string-parser': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - - '@babel/types@8.0.6': + '@babel/types@8.1.0': dependencies: - '@babel/helper-string-parser': 8.0.6 + '@babel/helper-string-parser': 8.0.8 '@babel/helper-validator-identifier': 8.0.6 '@borewit/text-codec@0.2.3': {} @@ -7638,7 +7623,7 @@ snapshots: marked: 18.0.11 marked-cjk-friendly: 0.1.2(marked@18.0.11) - '@electron-internal/extract-zip@1.0.5': {} + '@electron-internal/extract-zip@1.0.8': {} '@electron/asar@3.4.1': dependencies: @@ -7664,7 +7649,7 @@ snapshots: fs-extra: 8.1.0 got: 11.8.6 progress: 2.0.3 - semver: 6.3.1 + semver: 6.3.2 sumchecker: 3.0.1 optionalDependencies: global-agent: 3.0.0 @@ -7677,7 +7662,7 @@ snapshots: env-paths: 3.0.0 graceful-fs: 4.2.11 progress: 2.0.3 - semver: 7.8.5 + semver: 7.8.6 sumchecker: 3.0.1 optionalDependencies: undici: 7.30.1 @@ -7699,24 +7684,24 @@ snapshots: fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 - plist: 3.1.1 + plist: 3.1.0 transitivePeerDependencies: - supports-color - '@electron/osx-sign@2.7.1': + '@electron/osx-sign@2.7.2': dependencies: debug: 4.4.3 isbinaryfile: 4.0.10 plist: 3.1.1 - semver: 7.8.5 + semver: 7.8.6 transitivePeerDependencies: - supports-color - '@electron/rebuild@4.2.0': + '@electron/rebuild@4.2.1': dependencies: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 - node-abi: 4.33.0 + node-abi: 4.40.0 node-api-version: 0.2.1 node-gyp: 12.4.0 read-binary-file-arch: 1.0.6 @@ -7729,9 +7714,9 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 dir-compare: 4.2.0 - fs-extra: 11.3.6 + fs-extra: 11.4.1 minimatch: 9.0.9(patch_hash=d82eb6ab78ab1012d55ae44d746c1f8f19d358535ebc56e5e865c5daa78cb1f4) - plist: 3.1.1 + plist: 3.1.0 transitivePeerDependencies: - supports-color @@ -7880,7 +7865,7 @@ snapshots: prompts: 2.4.2 resolve-from: 5.0.0 sandbox-cli-detector: 0.2.0 - semver: 7.8.5 + semver: 7.8.6 send: 0.19.2 slugify: 1.6.9 stacktrace-parser: 0.1.11 @@ -7920,7 +7905,7 @@ snapshots: debug: 4.4.3 getenv: 2.0.0 glob: 13.0.6(patch_hash=6beb643a718eff7d7e70483b7992e3f1ddfbe50878326cd97dd817c5f5953fe7) - semver: 7.8.5 + semver: 7.8.6 slugify: 1.6.9 xcode: 4.0.0 xml2js: 0.6.0 @@ -7940,7 +7925,7 @@ snapshots: getenv: 2.0.0 glob: 13.0.6(patch_hash=6beb643a718eff7d7e70483b7992e3f1ddfbe50878326cd97dd817c5f5953fe7) resolve-workspace-root: 2.0.1 - semver: 7.8.5 + semver: 7.8.6 slugify: 1.6.9 transitivePeerDependencies: - supports-color @@ -7987,7 +7972,7 @@ snapshots: ignore: 5.3.2 minimatch: 10.2.6(patch_hash=4c80b68ecba29d8bdc1b80faeac833cf39dd28487711a846e5804e3bc044f6e7) resolve-from: 5.0.0 - semver: 7.8.5 + semver: 7.8.6 transitivePeerDependencies: - supports-color @@ -7999,7 +7984,7 @@ snapshots: getenv: 2.0.0 jimp-compact: 0.16.1 parse-png: 2.1.0 - semver: 7.8.5 + semver: 7.8.6 transitivePeerDependencies: - supports-color - typescript @@ -8162,7 +8147,7 @@ snapshots: debug: 4.4.3 expo-modules-autolinking: 58.0.16(typescript@7.0.2) resolve-from: 5.0.0 - semver: 7.8.5 + semver: 7.8.6 transitivePeerDependencies: - supports-color - typescript @@ -8526,9 +8511,9 @@ snapshots: '@napi-rs/keyring-win32-ia32-msvc': 2.1.2 '@napi-rs/keyring-win32-x64-msvc': 2.1.2 - '@noble/hashes@1.4.0': {} + '@noble/hashes@1.8.0': {} - '@noble/hashes@2.2.0': {} + '@noble/hashes@2.4.0': {} '@noxcturnal/noxcturnal-darwin-arm64@0.1.11': optional: true @@ -8556,14 +8541,14 @@ snapshots: '@opentelemetry/api@1.9.1': {} - '@oxc-project/types@0.153.0': {} - '@oxc-project/types@0.154.0': {} - '@peculiar/asn1-schema@2.8.0': + '@oxc-project/types@0.156.0': {} + + '@peculiar/asn1-schema@2.11.1': dependencies: '@peculiar/utils': 2.0.3 - asn1js: 3.0.10 + asn1js: 3.1.0 tslib: 2.9.1 '@peculiar/json-schema@1.1.12': @@ -8574,12 +8559,12 @@ snapshots: dependencies: tslib: 2.9.1 - '@peculiar/webcrypto@1.7.1': + '@peculiar/webcrypto@1.7.2': dependencies: - '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-schema': 2.11.1 '@peculiar/json-schema': 1.1.12 '@peculiar/utils': 2.0.3 - tslib: 2.8.1 + tslib: 2.9.1 webcrypto-core: 1.9.2 '@playwright/test@1.64.1': @@ -9149,49 +9134,49 @@ snapshots: dependencies: nanoid: 3.3.20 - '@rolldown/binding-android-arm-eabi@1.2.13': + '@rolldown/binding-android-arm-eabi@1.2.16': optional: true - '@rolldown/binding-android-arm64@1.2.13': + '@rolldown/binding-android-arm64@1.2.16': optional: true - '@rolldown/binding-darwin-arm64@1.2.13': + '@rolldown/binding-darwin-arm64@1.2.16': optional: true - '@rolldown/binding-darwin-x64@1.2.13': + '@rolldown/binding-darwin-x64@1.2.16': optional: true - '@rolldown/binding-freebsd-x64@1.2.13': + '@rolldown/binding-freebsd-x64@1.2.16': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.13': + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.13': + '@rolldown/binding-linux-arm64-gnu@1.2.16': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.13': + '@rolldown/binding-linux-arm64-musl@1.2.16': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.13': + '@rolldown/binding-linux-ppc64-gnu@1.2.16': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.13': + '@rolldown/binding-linux-s390x-gnu@1.2.16': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.13': + '@rolldown/binding-linux-x64-gnu@1.2.16': optional: true - '@rolldown/binding-linux-x64-musl@1.2.13': + '@rolldown/binding-linux-x64-musl@1.2.16': optional: true - '@rolldown/binding-openharmony-arm64@1.2.13': + '@rolldown/binding-openharmony-arm64@1.2.16': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.13': + '@rolldown/binding-win32-arm64-msvc@1.2.16': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.13': + '@rolldown/binding-win32-x64-msvc@1.2.16': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -9487,10 +9472,6 @@ snapshots: dependencies: undici-types: 8.9.0 - '@types/node@26.6.5': - dependencies: - undici-types: 8.9.0 - '@types/node@26.6.6': dependencies: undici-types: 8.9.0 @@ -9599,10 +9580,10 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - '@vitejs/plugin-react@6.1.2(babel-plugin-react-compiler@1.0.0)(vite@8.3.4(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-react@6.1.2(babel-plugin-react-compiler@1.0.0)(vite@8.3.5(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.4(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.5(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) optionalDependencies: babel-plugin-react-compiler: 1.0.0 @@ -9688,32 +9669,32 @@ snapshots: ansi-styles@5.2.0: {} - app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3): + app-builder-lib@26.15.3(dmg-builder@26.18.0)(electron-builder-squirrel-windows@26.15.3): dependencies: '@electron/asar': 3.4.1 '@electron/fuses': 1.8.0 '@electron/get': 3.1.0 '@electron/notarize': 2.5.0 '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.2.0 + '@electron/rebuild': 4.2.1 '@electron/universal': 2.0.3 '@malept/flatpak-bundler': 0.4.0 - '@noble/hashes': 2.2.0 - '@peculiar/webcrypto': 1.7.1 + '@noble/hashes': 2.4.0 + '@peculiar/webcrypto': 1.7.2 '@types/fs-extra': 9.0.13 ajv: 8.20.0 - asn1js: 3.0.10 + asn1js: 3.1.0 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.4.3 - dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) + dmg-builder: 26.18.0(electron-builder-squirrel-windows@26.15.3) dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.15.3(dmg-builder@26.15.3) + electron-builder-squirrel-windows: 26.15.3(dmg-builder@26.18.0) electron-publish: 26.15.3 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -9723,7 +9704,55 @@ snapshots: json5: 2.2.3 lazy-val: 1.0.5 minimatch: 10.2.6(patch_hash=4c80b68ecba29d8bdc1b80faeac833cf39dd28487711a846e5804e3bc044f6e7) - pkijs: 3.4.0 + pkijs: 3.4.3 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.4 + tar: 7.5.22 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + unzipper: 0.12.5 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + + app-builder-lib@26.18.0(dmg-builder@26.18.0)(electron-builder-squirrel-windows@26.15.3): + dependencies: + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.2.1 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@noble/hashes': 1.8.0 + '@peculiar/webcrypto': 1.7.2 + '@types/fs-extra': 9.0.13 + ajv: 8.20.0 + asn1js: 3.1.0 + async-exit-hook: 2.0.1 + builder-util: 26.16.0 + builder-util-runtime: 9.7.0 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3 + dmg-builder: 26.18.0(electron-builder-squirrel-windows@26.15.3) + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.15.3(dmg-builder@26.18.0) + electron-publish: 26.18.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.7 + jiti: 2.7.0 + js-yaml: 4.3.2 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.2.6(patch_hash=4c80b68ecba29d8bdc1b80faeac833cf39dd28487711a846e5804e3bc044f6e7) + pkijs: 3.4.3 plist: 3.1.0 proper-lockfile: 4.1.2 resedit: 1.7.2 @@ -9786,11 +9815,11 @@ snapshots: asap@2.0.6: {} - asn1js@3.0.10: + asn1js@3.1.0: dependencies: pvtsutils: 1.3.6 - pvutils: 1.1.5 - tslib: 2.8.1 + pvutils: 1.2.0 + tslib: 2.9.1 async-exit-hook@2.0.1: {} @@ -9807,7 +9836,7 @@ snapshots: '@babel/compat-data': 7.29.7 '@babel/core': 7.29.7 '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) - semver: 6.3.1 + semver: 6.3.2 transitivePeerDependencies: - supports-color @@ -9828,7 +9857,7 @@ snapshots: babel-plugin-react-compiler@1.0.0: dependencies: - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 babel-plugin-react-native-web@0.21.4: {} @@ -10014,7 +10043,7 @@ snapshots: builder-util-runtime@9.7.0: dependencies: debug: 4.4.3 - sax: 1.6.0 + sax: 1.6.1 transitivePeerDependencies: - supports-color @@ -10037,6 +10066,25 @@ snapshots: transitivePeerDependencies: - supports-color + builder-util@26.16.0: + dependencies: + '@types/debug': 4.1.13 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.3.2 + sanitize-filename: 1.6.4 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + bytes@3.1.2: {} bytestreamjs@2.0.1: {} @@ -10528,10 +10576,10 @@ snapshots: minimatch: 3.1.5 p-limit: 3.1.0 - dmg-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): + dmg-builder@26.18.0(electron-builder-squirrel-windows@26.15.3): dependencies: - app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) - builder-util: 26.15.3 + app-builder-lib: 26.18.0(dmg-builder@26.18.0)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.16.0 fs-extra: 10.1.0 js-yaml: 4.3.2 transitivePeerDependencies: @@ -10580,23 +10628,23 @@ snapshots: dependencies: jake: 10.9.4 - electron-builder-squirrel-windows@26.15.3(dmg-builder@26.15.3): + electron-builder-squirrel-windows@26.15.3(dmg-builder@26.18.0): dependencies: - app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + app-builder-lib: 26.15.3(dmg-builder@26.18.0)(electron-builder-squirrel-windows@26.15.3) builder-util: 26.15.3 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): + electron-builder@26.18.0(electron-builder-squirrel-windows@26.15.3): dependencies: - app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) - builder-util: 26.15.3 + app-builder-lib: 26.18.0(dmg-builder@26.18.0)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.16.0 builder-util-runtime: 9.7.0 chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) + dmg-builder: 26.18.0(electron-builder-squirrel-windows@26.15.3) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -10619,6 +10667,20 @@ snapshots: transitivePeerDependencies: - supports-color + electron-publish@26.18.0: + dependencies: + '@types/fs-extra': 9.0.13 + aws4: 1.13.2 + builder-util: 26.16.0 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + form-data: 4.0.6 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.448: {} electron-to-chromium@1.5.472: {} @@ -10635,9 +10697,9 @@ snapshots: transitivePeerDependencies: - supports-color - electron@44.9.1: + electron@45.2.1: dependencies: - '@electron-internal/extract-zip': 1.0.5 + '@electron-internal/extract-zip': 1.0.8 '@electron/get': 5.1.0 '@types/node': 24.19.2 transitivePeerDependencies: @@ -10803,7 +10865,7 @@ snapshots: expo-dev-menu-interface: 58.0.1(expo@58.0.21) react-native: 0.88.1(@babel/core@7.29.7)(@types/react@19.3.0)(react@19.3.0) - expo-doctor@1.21.4: {} + expo-doctor@1.21.5: {} expo-file-system@58.0.13(expo@58.0.21)(react-native@0.88.1(@babel/core@7.29.7)(@types/react@19.3.0)(react@19.3.0)): dependencies: @@ -11133,18 +11195,11 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@11.3.6: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - fs-extra@11.4.1: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.1 universalify: 2.0.1 - optional: true fs-extra@7.0.1: dependencies: @@ -11257,7 +11312,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.8.5 + semver: 7.7.4 serialize-error: 7.0.1 optional: true @@ -12094,7 +12149,7 @@ snapshots: metro-source-map@0.87.1: dependencies: '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.87.1 @@ -12166,8 +12221,8 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/generator': 7.29.8 - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 + '@babel/parser': 7.29.12 + '@babel/types': 7.29.11 flow-enums-runtime: 0.0.6 metro: 0.87.1 metro-babel-transformer: 0.87.1 @@ -12207,10 +12262,10 @@ snapshots: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7 '@babel/generator': 7.29.8 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.12 '@babel/template': 7.29.7 '@babel/traverse': 7.29.8 - '@babel/types': 7.29.8 + '@babel/types': 7.29.11 accepts: 2.0.0 connect: 3.7.0 debug: 4.4.3 @@ -12563,13 +12618,13 @@ snapshots: dependencies: content-type: 2.1.0 - node-abi@4.33.0: + node-abi@4.40.0: dependencies: - semver: 7.8.5 + semver: 7.7.4 node-api-version@0.2.1: dependencies: - semver: 7.8.5 + semver: 7.7.4 node-domexception@1.0.0: {} @@ -12592,7 +12647,7 @@ snapshots: graceful-fs: 4.2.11 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.8.5 + semver: 7.7.4 tar: 7.5.22 tinyglobby: 0.2.17 undici: 6.29.1 @@ -12630,7 +12685,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.8.5 + semver: 7.8.6 validate-npm-package-name: 5.0.1 nullthrows@1.1.1: {} @@ -12803,14 +12858,14 @@ snapshots: pkce-challenge@5.0.1: {} - pkijs@3.4.0: + pkijs@3.4.3: dependencies: - '@noble/hashes': 1.4.0 - asn1js: 3.0.10 + '@noble/hashes': 1.8.0 + asn1js: 3.1.0 bytestreamjs: 2.0.1 pvtsutils: 1.3.6 - pvutils: 1.1.5 - tslib: 2.8.1 + pvutils: 1.2.0 + tslib: 2.9.1 playwright-core@1.64.1: {} @@ -12933,7 +12988,7 @@ snapshots: dependencies: tslib: 2.9.1 - pvutils@1.1.5: {} + pvutils@1.2.0: {} qrcode@1.5.4: dependencies: @@ -13221,26 +13276,26 @@ snapshots: robust-predicates@3.0.3: {} - rolldown@1.2.13: + rolldown@1.2.16: dependencies: - '@oxc-project/types': 0.153.0 + '@oxc-project/types': 0.156.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm-eabi': 1.2.13 - '@rolldown/binding-android-arm64': 1.2.13 - '@rolldown/binding-darwin-arm64': 1.2.13 - '@rolldown/binding-darwin-x64': 1.2.13 - '@rolldown/binding-freebsd-x64': 1.2.13 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.13 - '@rolldown/binding-linux-arm64-gnu': 1.2.13 - '@rolldown/binding-linux-arm64-musl': 1.2.13 - '@rolldown/binding-linux-ppc64-gnu': 1.2.13 - '@rolldown/binding-linux-s390x-gnu': 1.2.13 - '@rolldown/binding-linux-x64-gnu': 1.2.13 - '@rolldown/binding-linux-x64-musl': 1.2.13 - '@rolldown/binding-openharmony-arm64': 1.2.13 - '@rolldown/binding-win32-arm64-msvc': 1.2.13 - '@rolldown/binding-win32-x64-msvc': 1.2.13 + '@rolldown/binding-android-arm-eabi': 1.2.16 + '@rolldown/binding-android-arm64': 1.2.16 + '@rolldown/binding-darwin-arm64': 1.2.16 + '@rolldown/binding-darwin-x64': 1.2.16 + '@rolldown/binding-freebsd-x64': 1.2.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.16 + '@rolldown/binding-linux-arm64-gnu': 1.2.16 + '@rolldown/binding-linux-arm64-musl': 1.2.16 + '@rolldown/binding-linux-ppc64-gnu': 1.2.16 + '@rolldown/binding-linux-s390x-gnu': 1.2.16 + '@rolldown/binding-linux-x64-gnu': 1.2.16 + '@rolldown/binding-linux-x64-musl': 1.2.16 + '@rolldown/binding-openharmony-arm64': 1.2.16 + '@rolldown/binding-win32-arm64-msvc': 1.2.16 + '@rolldown/binding-win32-x64-msvc': 1.2.16 roughjs@4.6.6: dependencies: @@ -13273,8 +13328,6 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - sax@1.6.0: {} - sax@1.6.1: {} saxes@5.0.1: @@ -13286,14 +13339,16 @@ snapshots: semver-compare@1.0.0: optional: true - semver@5.7.2: {} + semver@5.7.3: {} - semver@6.3.1: {} + semver@6.3.2: {} semver@7.7.4: {} semver@7.8.5: {} + semver@7.8.6: {} + send@0.19.2: dependencies: debug: 2.6.9 @@ -13424,7 +13479,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.8.5 + semver: 7.8.6 sisteransi@1.0.5: {} @@ -13591,7 +13646,7 @@ snapshots: tiny-async-pool@1.3.0: dependencies: - semver: 5.7.2 + semver: 5.7.3 tinyexec@1.3.1: {} @@ -13830,12 +13885,12 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.3.4(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): + vite@8.3.5(@types/node@26.6.6)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 - postcss: 8.5.29 - rolldown: 1.2.13 + postcss: 8.5.32 + rolldown: 1.2.16 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.6.6 @@ -13863,10 +13918,10 @@ snapshots: webcrypto-core@1.9.2: dependencies: - '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-schema': 2.11.1 '@peculiar/json-schema': 1.1.12 '@peculiar/utils': 2.0.3 - asn1js: 3.0.10 + asn1js: 3.1.0 tslib: 2.9.1 webidl-conversions@3.0.1: {} diff --git a/scripts/release/nsis-extractor.mjs b/scripts/release/nsis-extractor.mjs index c17a53d1a..99cdb6605 100644 --- a/scripts/release/nsis-extractor.mjs +++ b/scripts/release/nsis-extractor.mjs @@ -4,6 +4,7 @@ import { lstat, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { createRequire } from "node:module"; import { tmpdir } from "node:os"; import { join } from "node:path"; +import { builderVersion } from "../../apps/desktop/scripts/distribution/installer-builder.mjs"; // Build-host tooling only: the Windows builder's standalone 7za lacks NSIS. // Source: https://github.com/ip7z/7zip/releases/tag/26.05 and its asset digest. @@ -20,8 +21,8 @@ export async function prepareNsisExtractor() { if (process.env.ELECTRON_BUILDER_7ZIP_PATH) throw new Error("final_artifact_7zip_override_forbidden"); const require = createRequire(new URL("../../apps/desktop/package.json", import.meta.url)); const builderRequire = createRequire(require.resolve("electron-builder/package.json")); - if (require("electron-builder/package.json").version !== "26.15.3" - || builderRequire("app-builder-lib/package.json").version !== "26.15.3") throw new Error("final_artifact_builder_version_mismatch"); + if (require("electron-builder/package.json").version !== builderVersion + || builderRequire("app-builder-lib/package.json").version !== builderVersion) throw new Error("final_artifact_builder_version_mismatch"); const bootstrap = await builderRequire("app-builder-lib/out/toolsets/7zip.js").getPath7za(); if (process.platform !== "win32") return { path: bootstrap, cleanup: async () => {} }; if (process.arch !== "x64") throw new Error("Unsupported native NSIS verifier architecture");