const fs = require('fs-extra'); const path = require('node:path'); /** * Attempt to find the project root by walking up from startDir * Looks for common project markers like .git, package.json, pyproject.toml, etc. * @param {string} startDir * @returns {Promise} project root directory or null if not found */ async function findProjectRoot(startDir) { try { let dir = path.resolve(startDir); const root = path.parse(dir).root; const markers = [ '.git', 'package.json', 'pnpm-workspace.yaml', 'yarn.lock', 'pnpm-lock.yaml', 'pyproject.toml', 'requirements.txt', 'go.mod', 'Cargo.toml', 'composer.json', '.hg', '.svn', ]; while (true) { const exists = await Promise.all(markers.map((m) => fs.pathExists(path.join(dir, m)))); if (exists.some(Boolean)) { return dir; } if (dir === root) break; dir = path.dirname(dir); } return null; } catch { return null; } } module.exports = { findProjectRoot };