import type { PackageManager, ResolvedCliOptions } from './cli.js';
import { type TemplateRepository } from './templates.js';
export type ScaffoldStage = 'prepare' | 'fetch-template' | 'copy-template' | 'git' | 'install' | 'build' | 'inspect';
export interface CommandResult {
    exitCode: number;
    stdout: string;
    stderr: string;
}
export interface CommandRunnerOptions {
    cwd: string;
    timeoutMs?: number;
}
export type CommandRunner = (command: string, args: string[], options: CommandRunnerOptions) => Promise<CommandResult>;
export interface CommandReceipt {
    stage: ScaffoldStage;
    command: string;
    args: string[];
    cwd: string;
    exitCode: number;
}
export interface ScaffoldFailureReceipt {
    stage: ScaffoldStage;
    message: string;
    exitCode: number;
    stderr?: string;
}
export interface ResolvedPackageVersion {
    name: string;
    version: string;
    source: 'workspace' | 'installed';
}
export interface ScaffoldReceipt {
    success: boolean;
    directory: string;
    projectType: ResolvedCliOptions['projectType'];
    template: string | null;
    templateRepository: string;
    templateRevision: string;
    packageManager: {
        name: PackageManager;
        version: string | null;
    };
    createdFiles: string[];
    artifacts: string[];
    resolvedPackageVersions: ResolvedPackageVersion[];
    commands: CommandReceipt[];
    failures: ScaffoldFailureReceipt[];
}
export interface ScaffoldDependencies {
    runCommand?: CommandRunner;
    repositories?: Partial<Record<ResolvedCliOptions['projectType'], TemplateRepository>>;
    onProgress?: (stage: ScaffoldStage, message: string) => void;
    removeTemporaryDirectory?: (directory: string) => Promise<void>;
}
export declare class ScaffoldFailure extends Error {
    readonly exitCode: number;
    readonly receipt: ScaffoldReceipt;
    constructor(message: string, exitCode: number, receipt: ScaffoldReceipt);
}
export declare const TEMPLATE_FETCH_TIMEOUT_MS: number;
export declare function defaultCommandRunner(command: string, args: string[], options: CommandRunnerOptions): Promise<CommandResult>;
export declare function scaffoldProject(options: ResolvedCliOptions, dependencies?: ScaffoldDependencies): Promise<ScaffoldReceipt>;
export declare function detectPackageManager(outputDirectory: string, invocationDirectory: string, environment: NodeJS.ProcessEnv): Promise<PackageManager>;
//# sourceMappingURL=scaffold.d.ts.map