diff --git a/CHANGELOG.md b/CHANGELOG.md index fda249cd0..7adf2e334 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 0.1.63-beta.2 - 2026-04-26 +## 0.1.63-beta.3 - 2026-04-26 ### Added diff --git a/package-lock.json b/package-lock.json index 15a0bb725..713ae22a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38420,8 +38420,8 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@floating-ui/react-native": "^0.10.7", - "@getpaseo/expo-two-way-audio": "0.1.63-beta.2", - "@getpaseo/highlight": "0.1.63-beta.2", + "@getpaseo/expo-two-way-audio": "*", + "@getpaseo/highlight": "*", "@gorhom/bottom-sheet": "^5.2.6", "@gorhom/portal": "^1.0.14", "@react-native-async-storage/async-storage": "2.2.0", @@ -38588,7 +38588,8 @@ "version": "0.1.63-beta.2", "license": "AGPL-3.0-or-later", "dependencies": { - "@getpaseo/server": "0.1.63-beta.2", + "@getpaseo/cli": "*", + "@getpaseo/server": "*", "electron-log": "^5.4.3", "electron-updater": "^6.6.2", "ws": "^8.14.2" diff --git a/packages/app/package.json b/packages/app/package.json index f68fea0a3..d89223396 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -31,8 +31,8 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@floating-ui/react-native": "^0.10.7", - "@getpaseo/expo-two-way-audio": "0.1.63-beta.2", - "@getpaseo/highlight": "0.1.63-beta.2", + "@getpaseo/expo-two-way-audio": "*", + "@getpaseo/highlight": "*", "@gorhom/bottom-sheet": "^5.2.6", "@gorhom/portal": "^1.0.14", "@react-native-async-storage/async-storage": "2.2.0", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 93ea041c1..7c2173561 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -23,7 +23,8 @@ "typecheck": "tsgo --noEmit -p tsconfig.json" }, "dependencies": { - "@getpaseo/server": "0.1.63-beta.2", + "@getpaseo/cli": "*", + "@getpaseo/server": "*", "electron-log": "^5.4.3", "electron-updater": "^6.6.2", "ws": "^8.14.2" diff --git a/packages/desktop/src/daemon/desktop-packaging.test.ts b/packages/desktop/src/daemon/desktop-packaging.test.ts index 0057c2395..fee69ae5e 100644 --- a/packages/desktop/src/daemon/desktop-packaging.test.ts +++ b/packages/desktop/src/daemon/desktop-packaging.test.ts @@ -16,4 +16,21 @@ describe("desktop packaging", () => { "node_modules/@getpaseo/server/dist/src/terminal/shell-integration/**/*", ); }); + + // electron-builder packs production dependencies declared in package.json into + // app.asar. Runtime code in runtime-paths.ts and bin/paseo dynamically resolves + // these workspace packages by string, so static analysis (TypeScript, Knip) cannot + // see the link. If a runtime-required workspace dep is dropped from + // dependencies, the build still succeeds but ships a broken bundle. This + // assertion is the safety net. + it("declares all workspace packages required at runtime", () => { + const pkg = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8")) as { + dependencies?: Record; + }; + const deps = pkg.dependencies ?? {}; + + for (const required of ["@getpaseo/cli", "@getpaseo/server"]) { + expect(deps[required], `${required} must be declared in dependencies`).toBe("*"); + } + }); }); diff --git a/scripts/sync-workspace-versions.mjs b/scripts/sync-workspace-versions.mjs index 1d24a7145..5dbdbc53a 100644 --- a/scripts/sync-workspace-versions.mjs +++ b/scripts/sync-workspace-versions.mjs @@ -54,6 +54,11 @@ for (const workspacePath of workspacePaths) { } } + // Private workspaces (app, desktop) keep "*" for internal deps so npm always + // resolves the local sibling, never a registry artifact. Publishable workspaces + // get the root version so their published tarballs reference real npm versions. + const internalDepRange = pkg.private === true ? "*" : rootVersion; + for (const section of dependencySections) { const deps = pkg[section]; if (!deps || typeof deps !== "object") { @@ -67,8 +72,8 @@ for (const workspacePath of workspacePaths) { if (name === pkg.name) { continue; } - if (deps[name] !== rootVersion) { - deps[name] = rootVersion; + if (deps[name] !== internalDepRange) { + deps[name] = internalDepRange; changed = true; } }