/**
 * Project-root marker detection.
 *
 * The wizard mutates files in `installDir`: it installs SDK dependencies,
 * writes init code, edits source files, persists `.amplitude/` metadata.
 * If the directory isn't actually a project root — the user invoked the
 * wizard from `$HOME`, from `~/dev/` (a multi-project parent), or from
 * a tmpdir — the wizard would scan thousands of files, instrument the
 * wrong codebase, or pollute the user's home dir with `.amplitude/`.
 *
 * We refuse to proceed in that case unless the caller passes `--force`.
 *
 * "Project root" is detected via the presence of any well-known package
 * manifest. The list is the union of what the wizard's `detect` flow
 * already supports (Next.js / Vue / React / Django / Flask / FastAPI /
 * Swift / RN / Android / Flutter / Go / Java / Unreal / Unity / Rails /
 * Laravel / Ruby / Python). One marker is enough.
 *
 * Pure module — no I/O at import time, no UI imports — so the rule can
 * be exercised in isolation by unit tests.
 */
/**
 * Filenames that indicate "this directory is a project root the wizard
 * can reasonably operate on." Add new ones when adding new framework
 * support — keep this list aligned with `FRAMEWORK_REGISTRY`.
 */
export declare const PROJECT_MARKER_FILES: readonly ["package.json", "pyproject.toml", "requirements.txt", "Pipfile", "Cargo.toml", "go.mod", "Gemfile", "pom.xml", "build.gradle", "build.gradle.kts", "Package.swift", "pubspec.yaml", "composer.json"];
/**
 * Project markers that live one directory deeper than the install dir.
 * Unity projects keep their version file inside `ProjectSettings/`; the
 * top-level project root has no manifest at all by Unity convention,
 * so without this entry every Unity user is told "no project manifest"
 * even though the framework is supported and detected by
 * `detectUnityProject` (`src/frameworks/unity/utils.ts`).
 */
export declare const PROJECT_MARKER_PATHS: readonly ["ProjectSettings/ProjectVersion.txt"];
/**
 * Project markers identified by file extension at the install-dir root.
 * Unreal Engine names its project file `<ProjectName>.uproject` — the
 * exact filename varies, so a fixed-name match in `PROJECT_MARKER_FILES`
 * doesn't work. We do a single non-recursive `readdir` and check
 * extensions; the cost is bounded by the number of files at the root.
 */
export declare const PROJECT_MARKER_EXTENSIONS: readonly [".uproject"];
export type ProjectGuardResult = {
    ok: true;
    markers: readonly string[];
} | {
    ok: false;
    reason: ProjectGuardReason;
    details: string;
};
export type ProjectGuardReason = 'is_home_dir' | 'is_filesystem_root' | 'no_project_marker' | 'install_dir_missing';
/**
 * Returns `{ ok: true }` when `installDir` looks like a project root the
 * wizard should operate on, or a structured failure with a reason and a
 * human-readable detail string. Pure — no side effects.
 *
 * Specific failure modes:
 *   - `is_home_dir`: installDir is exactly `os.homedir()`. Even if a
 *     marker is present (rare — `package.json` in `$HOME`), refuse,
 *     because the blast radius of `pnpm install` and `Write` tools in
 *     `$HOME` is unacceptable.
 *   - `is_filesystem_root`: installDir is `/`, `C:\`, or similar.
 *   - `no_project_marker`: directory exists but contains no recognized
 *     package manifest. Likely a multi-project parent dir (`~/dev/`)
 *     or a stray location.
 *   - `install_dir_missing`: directory does not exist.
 *
 * Callers can bypass with their own `--force` semantics.
 *
 * `homedir` is injectable for tests; production callers use the default.
 */
export declare function checkProjectGuard(installDir: string, homedir?: string): ProjectGuardResult;
