/**
 * Executable-runtime emitter — V2 Phase 3, Round 2.
 *
 * Handles `topology: 'executable'` factories: providers reached via
 * `spawnSync` / `execSync` — local CLI binaries such as gitnexus, ffmpeg,
 * or custom binaries.
 *
 * For each `import:` entry the consumer declares, this emitter produces:
 *   clients/<kebab-provider>.ts   — spawnSync wrapper with typed interface
 *
 * The generated client module:
 *   - Emits an `assertBinaryAvailable()` function called at module load
 *     that runs `spawnSync('which', [binary])` (or `spawnSync(binary, ['--version'])`
 *     as fallback) to fail loud at boot if the binary isn't on PATH.
 *   - Exports a `<ProviderName>Client` TypeScript interface matching the
 *     selected operations from `import.select`.
 *   - Exports a `<providerName>Client` constant that implements the interface
 *     by dispatching to `spawnSync`:
 *       * Dotted op `Subcommand.action`: runs `spawnSync(binary, ['subcommand', 'action', ...args])`.
 *       * Bare entity: runs `spawnSync(binary, [entity.toLowerCase(), ...args])`.
 *     stdout is parsed as JSON; non-zero exit throws a clear Error.
 *
 * --- Binary name resolution ---
 *
 * The binary name is read from:
 *   1. `factory.v2metadata.config?.binary` (explicit override)
 *   2. `factory.name` lowercased (e.g. 'Gitnexus' → 'gitnexus')
 *
 * --- Select grammar ---
 *
 * Follows V2 D2 resolution (same as library.ts):
 *   - Dotted: `Subcommand.action` → dispatches `spawnSync(binary, ['subcommand', 'action', ...])`.
 *   - Bare:   `EntityName`        → dispatches `spawnSync(binary, [entityname, ...])`.
 *
 * --- No server file ---
 *
 * Subprocess providers don't have a server-bind file.
 *
 * --- Deployment instance hint ---
 *
 * Emitter notes include a hint to add the provider to
 * `deployments.<env>.instances.infrastructure.<provider>` with
 * `config: { binary: <name> }`.
 */
import type { RuntimeEmitter, RuntimeEmitterContext, RuntimeEmitterResult } from './dispatcher.js';
/**
 * Executable-runtime emitter implementation.
 *
 * One call to `emit()` processes a single `import:` entry and produces
 * one client file under `clients/<provider-filename>.ts`.
 * No server-bind file is emitted (subprocess providers have no server).
 */
export declare class ExecutableRuntimeEmitter implements RuntimeEmitter {
    readonly topology: "executable";
    emit(ctx: RuntimeEmitterContext): Promise<RuntimeEmitterResult>;
}
//# sourceMappingURL=executable.d.ts.map