/**
 * @module        infra/spawn
 * @description   ProcessSpawner port —— 只用于启动 supervisor（长跑 sps tick 进程）
 *
 * @layer         infra
 *
 * 注意：Console 层禁止用 spawn 执行同步 CLI 操作（如 card add / worker launch）。
 * 这些都应走 Service 层直接调 Domain。只有 pipeline supervisor 这种长跑 + detach
 * 的进程才合法用 spawn。
 */
import { type ChildProcess } from 'node:child_process';
export interface SupervisorSpawnOptions {
    /** supervisor 要带的参数，如 ['tick', '<project>'] */
    args: string[];
    /** 输出重定向目标文件 */
    logPath: string;
    /** 工作目录，可选 */
    cwd?: string;
}
export interface CliSyncOptions {
    args: string[];
    cwd?: string;
    timeoutMs?: number;
}
export interface CliSyncResult {
    exitCode: number | null;
    stdout: string;
    stderr: string;
}
/** v0.50.17：runCommand 用于非 sps 的外部 CLI（npm / git 等） */
export interface CommandOptions {
    command: string;
    args: string[];
    cwd?: string;
    timeoutMs?: number;
}
export interface ProcessSpawner {
    /**
     * 启动一个 detached supervisor 进程，父退出后子继续跑。
     * 返回 ChildProcess 句柄（调用方可以 kill，但不 await）。
     */
    spawnSupervisor(opts: SupervisorSpawnOptions): ChildProcess;
    /**
     * 同步 spawn sps 子命令（短任务）—— 用于 executor glue。
     * Console 路由禁止直接用，必须经过 service → executor → spawner 这条路径。
     */
    runCliSync(opts: CliSyncOptions): Promise<CliSyncResult>;
    /**
     * 通用外部命令执行（npm / git 等）。和 runCliSync 一样收集 stdout+stderr+exitCode，
     * 不过不 prepend sps 入口。测试里走 FakeProcessSpawner 可注入任何输出。
     */
    runCommand(opts: CommandOptions): Promise<CliSyncResult>;
}
export declare class NodeProcessSpawner implements ProcessSpawner {
    spawnSupervisor(opts: SupervisorSpawnOptions): ChildProcess;
    runCliSync(opts: CliSyncOptions): Promise<CliSyncResult>;
    runCommand(opts: CommandOptions): Promise<CliSyncResult>;
}
export interface FakeSpawnCall {
    args: string[];
    logPath: string;
    cwd?: string;
}
/**
 * 不真 spawn，仅记录调用。用于 Service 层单测验证 "PipelineService.start
 * 的确调用了 supervisor"。
 */
export declare class FakeProcessSpawner implements ProcessSpawner {
    calls: FakeSpawnCall[];
    syncCalls: Array<{
        args: string[];
        cwd?: string;
    }>;
    commandCalls: Array<{
        command: string;
        args: string[];
        cwd?: string;
    }>;
    /** 测试可以预设每次 runCliSync 的响应；缺省返 { exitCode: 0, stdout:'', stderr:'' } */
    nextSyncResult: CliSyncResult | null;
    /** v0.50.17：runCommand 的响应——key = `<command> <args[0]>` 头两段，值 = 预设响应 */
    commandResults: Map<string, CliSyncResult>;
    private _pid;
    runCliSync(opts: CliSyncOptions): Promise<CliSyncResult>;
    runCommand(opts: CommandOptions): Promise<CliSyncResult>;
    spawnSupervisor(opts: SupervisorSpawnOptions): ChildProcess;
}
//# sourceMappingURL=spawn.d.ts.map