/**
 * Monorepo subproject detection for the project assistant.
 *
 * Detects workspace manifests at `rootPath` (pnpm/npm/yarn workspaces, Nx, Turbo,
 * Lerna, Cargo workspaces, Go workspaces, Gradle multi-module) and expands their
 * package globs (one level deep) into a list of candidate subprojects.
 *
 * Pure detection — no network, no shell. Output is capped at MAX_CANDIDATES with
 * an alphabetical truncation marker so the assistant prompt doesn't bloat.
 *
 * The result is consumed by:
 *   - POST /api/projects/scan (added to the JSON response so the Add-Project UI
 *     and the assistant can see monorepo signals).
 *   - The project-assistant prompt instructs the agent to look for these
 *     manifests during exploration and emit one component per workspace package
 *     with `repo: "."` + distinct `relative_path`.
 */
export type MonorepoFramework = "pnpm" | "npm-yarn-workspaces" | "nx" | "turbo" | "lerna" | "cargo" | "go" | "gradle";
export interface MonorepoCandidate {
    /** Path relative to rootPath, forward-slash. */
    relativePath: string;
    /** Frameworks that surfaced this candidate. */
    frameworks: MonorepoFramework[];
    /** Package name (e.g. "@scope/api") if discoverable from the manifest. */
    packageName?: string;
}
export interface MonorepoScanResult {
    /** Frameworks detected at root, regardless of candidate count. */
    frameworks: MonorepoFramework[];
    /** Candidate subproject paths (relative to rootPath), capped + sorted alphabetically. */
    candidates: MonorepoCandidate[];
    /** True if the candidate list was truncated. */
    truncated: boolean;
    /** Total count before truncation. */
    totalCount: number;
}
export declare const MAX_CANDIDATES = 30;
/**
 * Detect monorepo workspace manifests at `rootPath` and produce the candidate
 * subproject list.
 */
export declare function scanMonorepo(rootPath: string): MonorepoScanResult;
//# sourceMappingURL=monorepo-scan.d.ts.map