diff --git a/package.json b/package.json index d517387a..c2ca558d 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "team:prove-launch-matrix": "pnpm exec vitest run --maxWorkers 1 --minWorkers 1 test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts", "team:smoke-changes-real-data": "tsx scripts/team-changes-real-data-smoke.ts", "smoke:codex-runtime-install": "tsx scripts/smoke/codex-runtime-install.ts", - "prebuild": "tsx scripts/fetch-pricing-data.ts && pnpm --filter agent-teams-controller build && pnpm --filter agent-teams-mcp build", + "prebuild": "node ./scripts/ci/verify-radix-presence-patch.mjs && tsx scripts/fetch-pricing-data.ts && pnpm --filter agent-teams-controller build && pnpm --filter agent-teams-mcp build", "build": "node --max-old-space-size=8192 ./node_modules/electron-vite/bin/electron-vite.js build", "stage-runtime": "node ./scripts/stage-runtime.mjs", "clean:runtime": "node ./scripts/stage-runtime.mjs --clean", diff --git a/scripts/ci/verify-radix-presence-patch.mjs b/scripts/ci/verify-radix-presence-patch.mjs new file mode 100644 index 00000000..36cf3f21 --- /dev/null +++ b/scripts/ci/verify-radix-presence-patch.mjs @@ -0,0 +1,33 @@ +import { createRequire } from 'node:module'; +import { readFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; + +const require = createRequire(import.meta.url); + +const entrypointPath = require.resolve('@radix-ui/react-presence'); +const packageRoot = dirname(dirname(entrypointPath)); +const filesToCheck = ['dist/index.js', 'dist/index.mjs']; + +const requiredMarkers = ['nodeCleanupGenerationRef', 'syncNode(null)']; +const missing = []; + +for (const relativePath of filesToCheck) { + const filePath = join(packageRoot, relativePath); + const source = readFileSync(filePath, 'utf8'); + const missingMarkers = requiredMarkers.filter((marker) => !source.includes(marker)); + if (missingMarkers.length > 0) { + missing.push(`${relativePath}: ${missingMarkers.join(', ')}`); + } +} + +if (missing.length > 0) { + console.error( + [ + '@radix-ui/react-presence is installed without the local React 19 Presence patch.', + 'Run `pnpm install --force` before building production artifacts.', + '', + ...missing, + ].join('\n') + ); + process.exit(1); +}