/**
 * ============================================================
 *  src/utils/packageRoot.ts —— 定位 minimal-agent 包根目录
 * ------------------------------------------------------------
 *  问题：bundle 后 import.meta.url 指向 dist/main.js，
 *  源码模式则指向 src/<deep>/*.ts，两者深度不同。
 *  固定 `join(__dirname, '..', '..')` 在某一种模式下必然错。
 *
 *  方案：从调用方文件起向上找最近的 package.json，把那一层
 *  当作包根。源码模式（src/prompts、src/tools/grep）、bundle
 *  模式（dist/main.js）、全局安装（node_modules/minimal-agent/dist）
 *  全都自动适配。
 * ============================================================
 */
import { existsSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const cache = new Map();
/** 向上最多翻 8 级；超过仍找不到视为环境异常。 */
const MAX_DEPTH = 8;
export function findPackageRoot(metaUrl) {
    const cached = cache.get(metaUrl);
    if (cached !== undefined)
        return cached;
    let dir = dirname(fileURLToPath(metaUrl));
    for (let i = 0; i < MAX_DEPTH; i++) {
        if (existsSync(resolve(dir, 'package.json'))) {
            cache.set(metaUrl, dir);
            return dir;
        }
        const parent = dirname(dir);
        if (parent === dir)
            break;
        dir = parent;
    }
    throw new Error(`packageRoot: 找不到 package.json（起点 ${metaUrl}）`);
}
