import type { Runtime } from '../../../runtime/base.ts';
import type { ByteSource, IOResult } from '../../../io/types.ts';
import type { RouteDecision } from '../../../runtime/types.ts';
import type { Argv } from '../../expand/argv.ts';
import type { MountRegistry } from '../../mount/registry.ts';
import type { SessionState } from '../../session/session.ts';
import { ExecutionNode } from '../../types.ts';
import { type JobConsole } from '../../../shell/console/index.ts';
/**
 * Execute one admitted program; its surrounding shell stays in Mirage.
 *
 * Its output is handed over as it runs (`runOutput`), within the line's
 * deadline, kept alive until the output is closed. A program writes its
 * stderr into `sink` as it arrives, where the statement it runs in writes (a
 * job's console, a redirect, a compound body), so it lands beside its stdout
 * and stays when the program is stopped; without one it lands on the result,
 * kept as it arrives all the same.
 */
export declare function runExternal(argv: Argv, stdin: ByteSource | null, session: SessionState, registry: MountRegistry, routing: RouteDecision<Runtime>, signal?: AbortSignal, sink?: JobConsole): Promise<[ByteSource | null, IOResult, ExecutionNode]>;
//# sourceMappingURL=external.d.ts.map