|
28 | 28 | const bin = process.platform === "win32" |
29 | 29 | ? join(prefixDir, "gemini-prompt-refiner.cmd") |
30 | 30 | : join(prefixDir, "bin", "gemini-prompt-refiner"); |
31 | | - const installedEntry = join(prefixDir, "node_modules", "gemini-prompt-refiner", "dist", "src", "index.js"); |
| 31 | + const packageRoot = await findInstalledPackageRoot(prefixDir); |
| 32 | + const installedEntry = join(packageRoot, "dist", "src", "index.js"); |
32 | 33 | await access(bin); |
33 | 34 | await access(installedEntry); |
34 | 35 | const port = await reservePort(); |
@@ -93,6 +94,29 @@ function runNpm(args) { |
93 | 94 | : runProcess(npmCommand, args, { cwd: repoRoot, timeoutMs }); |
94 | 95 | } |
95 | 96 |
|
| 97 | +async function findInstalledPackageRoot(prefixDir) { |
| 98 | + const candidates = process.platform === "win32" |
| 99 | + ? [ |
| 100 | + join(prefixDir, "node_modules", "gemini-prompt-refiner"), |
| 101 | + join(prefixDir, "lib", "node_modules", "gemini-prompt-refiner"), |
| 102 | + ] |
| 103 | + : [ |
| 104 | + join(prefixDir, "lib", "node_modules", "gemini-prompt-refiner"), |
| 105 | + join(prefixDir, "node_modules", "gemini-prompt-refiner"), |
| 106 | + ]; |
| 107 | + |
| 108 | + for (const candidate of candidates) { |
| 109 | + try { |
| 110 | + await access(candidate); |
| 111 | + return candidate; |
| 112 | + } catch { |
| 113 | + // Try the next npm global install layout. |
| 114 | + } |
| 115 | + } |
| 116 | + |
| 117 | + throw new Error(`Installed package root not found under npm prefix ${prefixDir}. Tried: ${candidates.join(", ")}`); |
| 118 | +} |
| 119 | + |
96 | 120 | async function waitForHealth(port, readLogs, deadlineMs) { |
97 | 121 | const deadline = Date.now() + deadlineMs; |
98 | 122 | let lastError = ""; |
|
0 commit comments